#背景
昔、エンジニアをしていた時に動的メモリの確保はページサイズ×nで行うものだと徹底して指導された。
ただ、それが何故なのかはよく分かっていなかったので、効率的な動的メモリの確保方法について調べてみた。答えは見つかっていないです。
※本記事はあくまで自分の備忘録です。
#そもそもmallocって・・・
mallocの機能は、取得希望を出した領域が取れたか取れてないかを教えてくれるものですが(当然、アドレスくれます)、実際いくつ領域が確保できたかは教えてくれないんです。
一応、linuxではmalloc_usable_sizeという関数で動的確保済み領域のサイズを教えてくれるのですが、標準サポートでないとのことで信用できるかは不明というどうしようも無さがあります。
#判明点
mallocはライブラリであり、別にシステムコールじゃないよということ。
mallocは取得希望のサイズが少ない場合はbrkというシステムコールを発行し、多い場合にはmmapというシステムコールを発行している。
この閾値はMMAP_THRESHOLD(デフォルトは128 kB、変更も可能)
brkは任意のサイズ(データバス幅に従う)を指定可能
mmapはページサイズの倍数を指定可能
#調べてみて感じたところ
brkだとフラグメンテーションだらけになるから、ぼこぼこ呼んだり離したりしまくるもんじゃない。小さい領域なら初めから静的に確保すれば良い。(場当たり的にmallocで小さい領域とるなよ・・・)
mmapだと大きくとるので、その領域を利用者がきれいに管理しながら使う必要がある。