C++ 动态分配内存存储

C++ 动态分配内存存储,c++,memory-management,new-operator,heap-memory,C++,Memory Management,New Operator,Heap Memory,当动态分配内存时,它是否存储在堆上,而不管它声明在哪里?例如,如果在main()中声明了以下代码行 int*p=新int[100000] 内存是从堆还是堆栈分配的 如果在全局范围中进行相同的声明,则将从堆中获取内存。但是我读到动态分配的内存存储在堆上,局部变量存储在堆栈上。因此,当上面这行代码从main内部执行时,这使它成为一个局部变量,内存会从堆栈或堆中获得吗?我想我应该这样回答: 非常简单: 如果使用“new”,内存将从堆中分配 “p”是一个局部变量。它是一个指针,存储在堆栈上 它指向的1

当动态分配内存时,它是否存储在堆上,而不管它声明在哪里?例如,如果在main()中声明了以下代码行

int*p=新int[100000]

内存是从堆还是堆栈分配的


如果在全局范围中进行相同的声明,则将从堆中获取内存。但是我读到动态分配的内存存储在堆上,局部变量存储在堆栈上。因此,当上面这行代码从main内部执行时,这使它成为一个局部变量,内存会从堆栈或堆中获得吗?

我想我应该这样回答:

非常简单:

  • 如果使用“new”,内存将从堆中分配

  • “p”是一个局部变量。它是一个指针,存储在堆栈上

  • 它指向的10000个整数由“新”分配;它们存储在堆中

将始终从堆中分配内存(正确的术语是动态存储)。这意味着使用
new
new[]


只有指针变量本身将获得
main()
外部的静态存储分配,本地存储分别位于内部。

非常简单:如果使用“new”,内存将从堆中分配。“p”是一个局部变量——它是一个指针,存储在堆栈上。它指向的10000个整数由“新”分配;它们存储在堆中。
p
本身在堆栈上。它指向堆中分配的内存。
int* p = new int[100000];