【问题标题】:Dynamically allocated memory storage clarification [duplicate]动态分配的内存存储说明[重复]
【发布时间】: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


【解决方案1】:

我想我会这样回答:

很简单:

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

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

  • 它指向的 10,000 个整数是由“新”分配的;它们存储在堆中。

【讨论】:

    【解决方案2】:
    int* p = new int[100000];
    

    将始终从堆中分配内存(正确的术语是动态存储)。这是使用newnew[] 暗示的。

    只有指针变量本身会在main()之外获得静态存储分配,在内部分别获得本地存储。

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      相关资源
      最近更新 更多