萌えハッカーニュースリーダー

2025/07/01 11:42 phkmalloc

出典: https://phk.freebsd.dk/sagas/phkmalloc/
hakase
博士

ロボ子、今日のITニュースはmallocの話じゃぞ。FreeBSDで昔使われていたmallocの実装が、RAM不足で大変だったらしい。

roboko
ロボ子

mallocですか。メモリ管理の基本ですね。RAMが少なかった時代は、今とは違う苦労があったんですね。

hakase
博士

そうなんじゃ。昔は4MBのRAMしかなかった環境でGCCを頻繁に実行していたから、ページングが頻発して、プログラム終了時にディスクアクセスが多発する「death-rattle」という現象が起きていたらしいぞ。

roboko
ロボ子

4MBですか!今の時代では考えられないですね。death-rattle、なんだか怖い名前ですね。

hakase
博士

昔のmallocは仮想記憶環境を考慮していなかったから、性能が悪かったんじゃ。free(3)の時に、未使用メモリを読み込む必要があったのが問題だったらしい。

roboko
ロボ子

未使用メモリを読み込むのは非効率ですね。それで、どう解決したんですか?

hakase
博士

そこで、phkmallocというmallocが開発されたんじゃ。freeする時に、freeリストの先頭に小さな構造体を挿入して、実際のfreeメモリに触れないようにしたらしいぞ。Chris Kingsleyのコードを全部削除して、ゼロから書き直したらしい。

roboko
ロボ子

大胆な解決策ですね!ゼロから書き直すなんて、すごいですね。

hakase
博士

phkmallocは、チャンクに関するメタデータをチャンク自体から離したり、サブページサイズの割り当てにバイナリ「バディ」レイアウトを使ったりして、メモリ効率を上げたらしいぞ。不正なmalloc(3)/free(3)/realloc(3)の使用を検出する機能も追加したらしい。

roboko
ロボ子

メタデータを分離するのは、セキュリティ的にも良さそうですね。不正使用の検出機能も、デバッグに役立ちそうです。

hakase
博士

そうなんじゃ。phkmallocはバッファオーバーフロー攻撃に強かったらしいぞ。2003年にdouble-freeの脆弱性が見つかったけど、phkmallocを採用していたBSDではエクスプロイトが機能しなかったらしい。

roboko
ロボ子

それはすごいですね!セキュリティ面でも優れていたんですね。

hakase
博士

USEnix ATC 1998での発表では、多くのunix.godsのコードにmalloc(3)の使用バグがあると指摘して、聴衆は笑い、互いにからかい合ったらしいぞ。

roboko
ロボ子

なんだか面白い光景ですね。発表者もプレッシャーだったでしょうね。

hakase
博士

でも、phkmallocも万能ではなかったんじゃ。マルチスレッドやマルチCPUシステムが普及すると、データ構造がボトルネックになったらしい。RAM価格が低下したこともあって、jemallocに役割を引き継いだんじゃ。

roboko
ロボ子

時代の流れですね。でも、phkmallocの貢献は大きかったと思います。

hakase
博士

ほんとそれな。しかし、昔のエンジニアは少ないリソースでよく頑張ったのじゃ。今の恵まれた環境に感謝しないといけないぞ。

roboko
ロボ子

そうですね。先人の知恵に感謝です。ところで博士、mallocの話を聞いていたら、お腹が空いてきました。

hakase
博士

ロボ子もお腹が空いたか。それじゃ、今日は特別に、メモリ…じゃなくて、メロンパンでも食べに行くかのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search