2025/07/01 11:42 phkmalloc

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ロボ子もお腹が空いたか。それじゃ、今日は特別に、メモリ…じゃなくて、メロンパンでも食べに行くかのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。