(С++ 11) В чем разница между статическим массивом и динамическим массивом с инициализированным списком?

Например, есть массив int с тысячами элементов:

static int st_indices[9999] = {
   0,  27,  26,    1,  41,  71,    0,  26, 101,    0, 101, 131,    0, 131,  72,
   1,  71, 176,    2,  56, 206,    3, 116, 236,    4, 146, 266,    5, 161, 296,
......
};

и

int* dy_indices = new int[9999] {
   0,  27,  26,    1,  41,  71,    0,  26, 101,    0, 101, 131,    0, 131,  72,
   1,  71, 176,    2,  56, 206,    3, 116, 236,    4, 146, 266,    5, 161, 296,
......
};

В чем разница между двумя указанными выше способами, особенно значениями в фигурных скобках при использовании памяти?

Я знаю, что st_indices будет жить в памяти до тех пор, пока программа не завершится (STACK), а dy_indices будет выпущена после delete [] (HEAP). или это вопрос о стеке и сегменте .DATA?


person Nianliang    schedule 15.08.2014    source источник


Ответы (2)


Статические выполняются во время компиляции.. (установите объем памяти, также известный как STACK)

Динамические выполняются во время выполнения (динамическое выделение может быть любого размера в зависимости от системных ограничений, также известное как HEAP)

person savageWays    schedule 15.08.2014

Из ответа @Dr.Kameleon я узнал, что ОС будет читать содержимое исполняемого файла и загружать его в память.

То есть данные в фигурных скобках будут загружены в сегмент памяти .TEXT. Если мы не примем во внимание виртуальную память/разбиение на страницы, помещение данных в файл, а затем чтение уменьшит использование памяти (для приложения OpenGL).

person Nianliang    schedule 15.08.2014