В рассматриваемом случае STACK означает память, выделенную компилятором для локальных переменных, определенных в вашем методе. «Вы выделяете» (в кавычках, потому что это делается для вас) эту память, когда определить переменную как:
void myMethod(int x)
{
int y;
for (y = 0; y < 10; y++)
{
int z = x + y;
}
}
Все x
, y
и z
в этом примере локальных переменных, выделенных в стеке.
При создании некоторых экземпляров с new
оператором, вы выделяете память в куче (и здесь вы выделяете без кавычек), а адрес магазина этой выделенной памяти вы, вероятно, использовать переменный указатель, выделенные в стеке:
int * p = new int[10];
В настоящее время p
- это локальная переменная (хранится в стеке), которая хранит адрес памяти, выделенной в куче для массива из 10 целых чисел.
В то время как компилятор анализирует исходный код, он создал набор инструкций (в терминах конкретного процессора) для вызова вашего метода и в это время вычисляет размер памяти, необходимый для всех локальных переменных, и в момент времени выполнения программы память будет выделенных в стеке (и данные будут перемещены в некоторых из них, например, x
в моем примере будет инициализирован данными, указанными в инструкции вызова метода) до запуска метода (после завершения метода все память будет выпущена, т.е. стек будет освобожден данных используемые при выполнении метода "будут потеряны").
Вы должны добавить код для своего гипотетического сценария. Я думаю, что @DevSolar понял это правильно, но было бы менее двусмысленно, если бы вы предоставили код, о котором вы думаете. –