Я запускаю следующий код С++ в Ubuntu с 4 ГБ ОЗУ.
const long long nSize = 400000000;
double Array1[nSize];
for(int i=0; i<nSize; i++)
Array1[i]= 2*2; // store on the stack
И это умещается в оперативной памяти (и мой компьютер не жалуется). Как ни странно... htop говорит, что во время выполнения практически не используется дополнительная оперативная память... Почему? (Обычно я даю ему заснуть на 100 секунд на случай, если ему нужно будет обновиться)
С другой стороны, если я динамически выделяю огромный массив (как подобные уроки рекомендуют мне делать) -- htop сообщает мне, что он использует большую часть оперативной памяти (если не всю, и происходит сбой):
double *pnArray2 = new double[nSize];
for(int i=0; i<nSize; i++)
pnArray2[i] = 2*2; // store on the heap
Итак, почему я должен использовать кучу для хранения больших структур данных... если (как в этом примере) стек может обрабатывать еще большие массивы?
Я думал, что куча должна быть больше, чем стек! Пожалуйста, скажите мне, где я иду так неправильно.