Я читал, что, когда динамическая память выделяется в куче во время выполнения, статическая память выделяется в стеке во время компиляции, так как компилятор знает, сколько памяти нужно выделить во время компиляции.Память C++, выделенная во время компиляции
Рассмотрим следующий код:
int n;
cin>>n;
int a[n];
Как компилятор, возможно, знаете, сколько памяти выделить для [] во время компиляции, если его фактический размер считывается только во время бега?
Скорее всего, массивы с переменной длиной расширения являются функциями C99, но не разрешены в C++, см. [Этот предыдущий вопрос] (http://stackoverflow.com/q/19775954/1708801), в котором объясняются как «gcc», так и «clang 'разрешить это, но будет предупреждать с флагом' -pedantic'. –
Стек и куча никоим образом не привязаны к статическому и динамическому распределению соответственно. Абсолютно возможно динамически распределять память в стеке. См. Функцию 'alloca'. –
Это замечательный момент, и его следует упоминать каждый раз, когда обсуждаются динамические и статические распределения. Можно ли также статически ставить на кучу? – Botond