4GBのRAMを搭載したUbuntuで次のc++コードを実行しています
const long long nSize = 400000000;
double Array1[nSize];
for(int i=0; i<nSize; i++)
Array1[i]= 2*2; // store on the stack
そして、これはRAMに収まります(そして私のコンピューターは文句を言いません)。紛らわしいことに... htop は、実行時に追加の RAM がほとんど使用されていないと言っています...なぜですか?. (更新が必要な場合に備えて、通常は100秒間スリープさせます)
一方、巨大な配列を動的に割り当てると (このようなチュートリアルで推奨されているように)、htop は、RAM のほとんどを使い果たしていることを示します (すべてではなく、クラッシュする場合)。
double *pnArray2 = new double[nSize];
for(int i=0; i<nSize; i++)
pnArray2[i] = 2*2; // store on the heap
では、なぜヒープを使用して大きなデータ構造を格納する必要があるのでしょうか... (この例のように) スタックがさらに大きな配列を処理できるのであれば?
ヒープはスタックよりも大きいはずだと思っていました! どこが間違っているのか教えてください。