【发布时间】:2016-01-10 06:47:45
【问题描述】:
动态分配内存时,无论在哪里声明,它是否都存储在堆上?例如,如果在 main() 中声明了以下代码行
int* p = new int[100000];
内存是从堆还是栈分配?
如果在全局范围内进行相同的声明,则将从堆中获取内存。但是我读到动态分配的内存存储在堆上,而局部变量存储在堆栈上。那么当上面这行代码从main内部执行,使其成为局部变量时,是从栈中获取内存还是从堆中获取内存呢?
【问题讨论】:
-
很简单:如果使用“new”,内存将从堆中分配。 “p”是一个局部变量——它是一个指针,它存储在堆栈中。它指向的 10,000 个整数是由“新”分配的;它们存储在堆中。
-
p本身在堆栈上。它指向堆中分配的内存。
标签: c++ memory-management new-operator heap-memory