Я хотел выделить большой массив символов в сегменте данных , поэтому я использовал такой код:
const int size = 1000000000 ;
static char chr [ size ] ;
int main ( )
{
chr [ size - 1 ] = 1 ; // line 1
string s ;
cin >> s ; // line 2
}
строка 1: я поместил эту строку так, чтобы массивиспользуется по крайней мере один раз, и он не оптимизирован из компилятора
строка 2: чтобы остановить выполнение и проверить занятость памяти, например: в диспетчере задач Windows
наВ результате система Windows приводит к тому, что когда программа застревает в строке 2, ожидая ввода пользователя, в диспетчере задач (в обоих столбцах «Память» и «Рабочий набор») объем памяти, используемый процессом, значительно меньше ожидаемого 1 ГБ.
Затем я попытался использовать следующий код:
int main ( )
{
for ( int i = 0 ; i < size ; ++ i )
{
chr [ i ] = i ;
}
string s ;
cin >> s ; // line 2
}
Теперь, когда программа достигает строки 2, использование памяти достигает ожидаемого 1 ГБ после нескольких секунд быстрого роста.
Кажется, что память распределяется динамически, а не статически.
Неправильно ли мое понимание массивов / модели памяти?
Распределяет ли компилятор большие объемы данных?ta динамически для оптимизации?
Показывает ли диспетчер задач физически выделенную память и поэтому 1 ГБ изначально выделяется на жестком диске до первого использования?