私のプログラムでは、各オブジェクトのサイズが約 500 バイトであるオブジェクトの大きな (〜 1000 万要素) リストを作成します。現在、割り当ては次のようになっています。
const int N = 10000000;
object_type ** list = malloc( N * sizeof * list );
for (int i=0; i < N; i++)
list[i] = malloc( sizeof * list[i]);
これは問題なく動作しますが、多数の小さな割り当てがあると、実行時間のかなりの部分が malloc() とその後の free() 呼び出しに費やされることがわかりました。そのため、より大きなチャンクを割り当てるように実装を変更しようとしています。私にとって最も簡単なのは、すべてを 1 つの大きなチャンクとして割り当てることです。
これで、ユーザー空間のメモリ モデルと実際の物理メモリの間に少なくとも 1 レベルの仮想化があることがわかりましたが、非常に大きな「連続した」メモリ ブロックを取得する際に問題が発生するリスクはまだありますか?