我最近在学习C/C++,但是我对动态内存分配和堆之间的区别感到困惑。所以请告诉我c和c++中动态内存分配和堆的区别
最佳答案
动态内存分配与静态内存分配不同,因此如果您将其与堆进行比较,这是一个错误的比较。
- 动态和静态分配是指“如何”和“何时”分配内存。
- 堆、堆栈等是内存驻留的“位置”,并影响这些区域中内存的管理方式
静态内存在程序启动时分配,通常以局部或全局变量的形式。例如:
int globalVariable = 5;
int globalArray[ 2 ] = { 0, 1 };
void main()
{
int localVariable = 2;
int localArray[ 3 ] = { 1, 2, 3 };
}
这些内存分配在堆栈和程序空间上。
当程序执行诸如 malloc 之类的函数或“new”之类的运算符时,就会发生动态分配。例如:
void main()
{
int* pointerToInt = new int;
int* pointerToArrayOfInts = new int[2];
//do something
delete pointerToInt;
delete [] pointerToArrayOfInts;
}
需要注意的是,变量“pointerToInt”是在堆栈上静态分配的。但是,它指向的存储“int”的内存是在该行代码运行时动态分配的,这会在堆上分配内存。对于“pointerToArrayOfInt”也是如此。
关于c++ - C和C++中的动态内存分配和堆有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215950/