大容量メモリの確保の話

参照: http://d.hatena.ne.jp/ryocotan/20081006/p1, http://d.hatena.ne.jp/ryocotan/20081011/p1

  • Windows ってオーバーコミットしなかったような
    • 一気に大量に malloc すると、swap が足りなくて失敗するんじゃないか*1
    • swap は適宜拡張されて行くのでちょっとずつ malloc すれば OK みたいな

いずれにせよ、GB 単位のメモリを確保して使うのであれば、同サイズのファイルを作って、CreateFileMapping (mmap) するのがいいんじゃないのかなぁ。そうすれば、ユーザー空間の連続アドレスが確保できれば (64bit なら問題ないし、32bit でも事前にほぼ成否が予測できる)、malloc のように環境によって成否が分かれるとか、OOM killer でいきなり殺されるとかそういうことは起こらない (はず) というのが自分の理解。

*1: (実アドレスの)空きメモリ空間が逼迫してくると swap を拡張する仕組みだし