【问题标题】:Storage location of C++ array in memory [duplicate]C ++数组在内存中的存储位置[重复]
【发布时间】:2015-06-13 01:07:15
【问题描述】:

我理解C++中调用new相当于C中调用malloc,调用free时可以释放malloc函数返回的指针。调用 'new' int[length] 得到的数组存储在堆中。但是,如果一个静态数组,例如 int x[3] = {1,2,3};被宣布?这样的数组将存储在哪里?堆栈?

【问题讨论】:

标签: c++ arrays


【解决方案1】:

在堆栈中寻址本地数组。有一个无法增加的恒定大小。 如果你在数组中写入的值超过了它可以包含的值,就会出现所谓的堆栈溢出。在它们的字段后面,有其他值的内存,这些值将被覆盖。 Visual Studio 会创建一些保护字节来避免这种情况。

【讨论】:

  • 据我所知,您所描述的不是堆栈溢出,而是恰好在堆栈上的对象的越界访问。当您静态分配非常大的数据时,或者当您的某个函数中的递归级别过多时,就会出现堆栈溢出。在这种情况下,堆栈实际上会耗尽内存并且无法足够扩展。
【解决方案2】:

一个静态数组(在全局范围或命名空间中声明)将被放置在数据段中。 在函数范围内声明的本地数组将被放置在堆栈上。

int g_global_array[2] = {4,5,6};  //Data Segment
int main() {
     int local_array[3] = {1,2,3};  //Stack
     static int s_static = 10; //Also in the Data Segment (static)
     return 0;
}

(与普通的旧 C 相同)

http://www.geeksforgeeks.org/memory-layout-of-c-program/

【讨论】:

    【解决方案3】:

    是的,以这种方式声明的本地数组将存储在堆栈中并具有固定长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 2021-07-01
      • 2021-01-17
      • 2015-02-17
      • 1970-01-01
      • 2015-06-15
      • 2018-12-09
      相关资源
      最近更新 更多