c++ - C和C++中的动态内存分配和堆有什么区别

标签 c++ c memory-management

我最近在学习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/

相关文章:

Python 无法导入 (cython) 共享库

c++ - Make - "Treat warning as error"对于特定文件

c# - Graphics.CopyFromScreen() 和 GetDC(0) 失败,返回 "The handle is invalid"

C++ stringstream 到 ostream 到字符串

c++ - 如何将 libm.so 和 libdl.so 与我的 bazel 项目链接?

c - 如何识别我的 Alphacode 实现中的错误?

c - 简单嵌套循环的时间复杂度

objective-c - 如何通过重用单个 viewcontroller 加载 xibs 并处理内存警告?

memory-management - 如何在 TensorFlow 分析器中获得详细的内存分解?

iphone - 在模态视图中收到内存警告 - 父 View Controller 的对象被释放。如何预防?