Rust part27 (410レス)
上下前次1-新
9: 2024/12/03(火)15:08 ID:2bVb51Ek(1) AAS
>>8
最近のPCはメモリたくさん積んでるから、リークしても気にしなくていいよ
10(1): 2024/12/03(火)16:10 ID:ZsxKPak4(1) AAS
メモリプレッシャーがかかっても不必要にメモリをつかみ続けるFirefoxのようなお行儀の悪いプログラムか増えてるからメモリが潤沢にあってもリークは気にしたほうがいい
使い捨てプログラムや低品質でもいいプログラムなら気にしなくてもいいけどそういうのはGC言語でやる
11(1): 2024/12/03(火)16:16 ID:ey2XQ99f(1) AAS
>>8
仕事の製品開発ならgc言語でもメモリプロファイラ一使えよ
ハードの性能向上を無駄に消費するクソソフト多すぎだろ
12: 2024/12/03(火)16:51 ID:0HkaMF/9(1/3) AAS
GC 付きでもメモリリークのようなことが起こることはある。
多くの場合に表面化しないだけ。
プロセスが終わるときにはどうせまるごと回収されるからガッと処理してすぐ終わるようなプログラムでは特に表面化しにくい。
見えにくいからこそ意識的に調査すべきで、 >>11 の意見に同意する。
逆に問題が表面化しやすいのは長期的に起動しっぱなしなもので、わかりやすい例ではウェブサーバ (またはその後ろでサービスを提供するプログラム) などが挙げられる。
ウェブサーバの H2O はそれを防止するのと高速化のためにセッションごとにメモリの塊を確保してその塊の頭から順番に使っていき、セッションが終わると塊をまるごと解放するというメモリ戦略を取ってる。
13(2): 2024/12/03(火)17:09 ID:EOsQeLM6(2/4) AAS
C言語でリークという話なのでこんな感じ。
// メモリリーク例1: mallocした後にfreeし忘れる関数
void leak_in_function() {
char* ptr = (char*)malloc(100);
strcpy(ptr, "Hello");
// freeがないのでメモリリーク
}
// メモリリーク例2: 条件分岐でfreeを飛ばしてしまう
void conditional_leak(int value) {
int* numbers = (int*)malloc(sizeof(int) * 100);
省12
14: 2024/12/03(火)17:15 ID:EOsQeLM6(3/4) AAS
// メモリリーク例4: 動的配列の不完全な解放
typedef struct {
char* name;
int age;
} Person;
void struct_array_leak() {
Person* people = (Person*)malloc(3 * sizeof(Person));
for (int i = 0; i < 3; i++) {
people[i].name = (char*)malloc(50);
strcpy(people[i].name, "John Doe");
省5
15: 2024/12/03(火)17:23 ID:NKv2UDMA(1/3) AAS
バグが0になるまで投資を続けるのは誰もやらないのに
メモリリークを0にしようって言われたら投資してしまうのが人情というものだ
16: 2024/12/03(火)17:54 ID:aDn+t6mK(1) AAS
>>8
ここはRustスレなのに
なぜRustについて全く触れずにC言語の質問をするの?
C言語のスレがあるのだからそちらでしなさい
Rustについて触れずに他の言語の話だけをしている人たちも同罪
必ずRustについても言及しなさい
17: 2024/12/03(火)18:02 ID:cJEFyjqp(1) AAS
Rustのメモリ安全性の目的はメモリリークの回避じゃなくてダングリング参照の回避定期
ついでに競合アクセスも防ぐ
18: 2024/12/03(火)18:49 ID:ll5AjBl1(1) AAS
今度は「競合アクセス」と来たか
19(1): 2024/12/03(火)19:03 ID:VEyhp9WQ(1) AAS
C言語はfree()しても断片化という問題が発生すると聞いたことがある
断片化してもOSが落ちたりはしないんだろうけど遅くなるとかならないとか・・・
20: 2024/12/03(火)20:08 ID:0HkaMF/9(2/3) AAS
>>19
断片化によって起こるのはメモリ効率の悪さ。
空いてるメモリの総量が充分にあっても必要分だけ連続したメモリがない(メモリ確保に失敗する)ということが起こる。
C では確保したメモリの場所が変わる(アドレスが変わる)ということは起すわけにいかないので断片化はそれなりに深刻な問題になりうる。
GC には copying gc のように不要メモリの回収と同時に再配置するものもある。
21: 2024/12/03(火)20:58 ID:NKv2UDMA(2/3) AAS
64bitのアドレスが枯渇したとして・・・全オブジェクトに印をつけるGCを使うか?
22: 2024/12/03(火)21:39 ID:6bT0kHB3(1/2) AAS
Rustは長時間動かすとメモリが断片化するから、サーバープログラミングに向いてない
23: 2024/12/03(火)21:49 ID:J79bUhTh(1) AAS
外部リンク[html]:www.publickey1.jp
CDN世界トップシェアのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたC製のNGINXに代えて、
Rust製のHTTPプロキシサーバである「Pingora」を開発して利用していることを明らかにしました。
Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しており、
従来のNGINXと比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。
24: 2024/12/03(火)21:59 ID:EOsQeLM6(4/4) AAS
今時の標準アロケーターはよほどでかい領域を確保しない限りメモリの断片化は起きないようになってる。それでも問題ならカスタムアロケーター書くよ。
25: 2024/12/03(火)22:11 ID:Z14ZJxGL(1) AAS
アマゾンのAWSもRust製
Webサーバサイドでリソース節約したいならRust一択
26(1): 2024/12/03(火)22:47 ID:0HkaMF/9(3/3) AAS
>>10
現代的には使われていないメモリがあるほうが「無駄がある」と考える思想なので、メモリはあればあるだけ使う(キャッシュやプリロードなど投機的な処理で体感的な速度を上げる)設計になってる。
本当に足りなくなるまでは掴んだままのほうが良いと判断してやってる。
現代のニーズに合わせた意図的な設計としてやってるのでリークとは違う。
良いか悪いかは知らんがリークとは違う。
27: 2024/12/03(火)23:07 ID:6bT0kHB3(2/2) AAS
Rustはいつメモリのコンパクションできるようになるの?
28: 2024/12/03(火)23:30 ID:NKv2UDMA(3/3) AAS
いつも渋滞している道路は無駄がない道路か
まあ徒歩より遅いなら燃料いらないからな
上下前次1-新書関写板覧索設栞歴
あと 382 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.011s