2015-10-12 2 views
2

Когда память распределяется динамически, она хранится в куче независимо от того, где она была объявлена? Например, если следующая строка кода объявлена ​​внутри main()Динамически распределенная очистка памяти

int * p = new int [100000];

Будет ли выделяться память из кучи или стека?

Если та же декларация сделана в глобальном масштабе, память будет получена из кучи. Но я читал, что динамически выделенная память хранится в куче, а локальная переменная хранится в стеке. Итак, когда вышеуказанная строка кода выполняется изнутри main, что делает ее локальной переменной, будет ли память получена из стека или кучи?

+1

Очень просто: если вы используете «новое», память будет выделена из кучи. «p» - локальная переменная - это указатель и хранится в стеке. 10 000 ints, на которые указывает, были выделены «новыми»; они хранятся в куче. – paulsm4

+1

'p' сам находится в стеке. Он указывает на память, выделенную в куче. – interjay

ответ

1

я думал, что сделать этот ответ:

Очень просто:

  • Если вы используете «новым», память будет выделена из кучи.

  • "p" - это локальная переменная. Это указатель, и он хранится в стеке.

  • 10 000 единиц, на которые указывает, были выделены «новыми»; они хранятся в куче.

1
int* p = new int[100000]; 

всегда будет выделять память из кучи (правильный термин является динамическая память). Это подразумевается с использованием new или new[].

Только переменная-указатель сама получит распределение статического хранилища за пределами main(), локальное хранилище внутри соответственно.

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