マシン上で可能な限り大きなハッシュテーブルを作成したいと思います。初期化時にハッシュテーブルで使用するために大きなメモリブロックを要求すると思っていましたが、これを行うための最良の方法がわかりません。以下に、いろいろな考えや質問があります。Stack Overflowには関連する投稿がたくさんありますが、それでもよろしくお願いします。
16GiBのRAMを使って遊ぶとしましょう。
8GiBのような数を選び、常にそれだけ割り当てて、システムの残りの部分が残りの部分でうまくいくことを期待してください。これを行うことを選択した場合、8GiBを入手するための最良の方法は何ですか?これは64ビットシステムなので、呼び出す
malloc(1<<33)
ことができ、機能する可能性がありますが、断片化が問題になる可能性があると思うほど十分に大きいです。では、1GiBの8つの別々のブロックを割り当てるのが最善でしょうか?数字を選ぶのではなく、残りの物理メモリのすべて/ほとんどを要求したいと思います。
malloc
私はそれが戻るまで電話をかけることができると素朴に思っていましたNULL
が、楽観的なメモリ割り当てはそれを非常に役に立たないものにします(私のハードドライブもすべて割り当てることができるようです)。のようなユーティリティはtop
、vmstat
メモリ使用量を照会させてくれますが、同じ情報を取得するために使用できるシステムコールはありますか?この目的のためだけに物理的なメモリが必要なのは正しいですか?これまで使用したことがないのですが、巨大なハッシュテーブル
mmap
を作成するために検討する必要がありますか?私の本能は、テーブル全体にわたるランダムアクセスはに悪いだろうということでした。mmap
どんな助けでも素晴らしいでしょう!