2015-06-22 8 views
-2
#include <iostream> 
#include <cstdlib> 

using namespace std; 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 

int main(int argc, char** argv) { 
    int a[4]; 
} 

Я занимаюсь статическим распределением, не так ли? Итак, где находится? Стек или куча?C++: Я использую [], какую память использую?

+0

Да, распределение стека. – CoryKramer

+0

Я не вижу никаких новых или malloc/calloc/realloc, используемых в этом фрагменте кода. Как вы думаете, где находится 'a' .. ?? – HadeS

+0

Ну, я знаю, что автоматическое распределение использует Stack, но я не знал, что для статического распределения используется Stack. – Leo91

ответ

0

Любой объект в C/C++, который непосредственно объявляется в области функций, выделяется в стеке. Объекты, созданные от нового оператора или выделенные функциями, такими как malloc C, выделяются в куче.

Внутренний ресурс, наложенный на стек, объект C++ может нести ответственность за выделенные кучи данные, но сам объект все равно будет находиться в стеке.

В вашем примере массив представляет собой встроенный тип с постоянным размером, известным во время компиляции без упоминания нового оператора ... Определенно полностью в стеке!

0

Его распределение стека. Программист может создавать объект только в куче, используя такие функции, как malloc, calloc, realloca или оператор, такие как new, new []. и т. д. Поскольку вы создали массив из четырех целых чисел без указания каких-либо динамических процедур управления памятью.

0

Возможно, сначала нам нужно очистить условия. Общее определение переменной в пределах области называется «автоматическим». Например, ваше определение переменной является автоматическим. Если вы хотите, чтобы определение переменной было статическим, вы должны использовать ключевое слово «static».

Что касается памяти: в стек включены автоматические переменные. Выделенное пространство, например. через malloc или new, находится в куче. Статические переменные расположены на так называемом «сегменте данных». Для получения дополнительной информации смотрите здесь: http://www.geeksforgeeks.org/memory-layout-of-c-program/

Смежные вопросы