5

假设我有一个文件 test.c 包含:

char buffer1[1024];

int somefunction()
{
      char buffer2[1024];
      // do stuff
}

现在我知道 buffer2 是在属于 somefunction 调用的帧上的堆栈上分配的,但是 buffer1 分配在哪里?

4

3 回答 3

9

这些变量通常位于BSS(在源代码中没有显式初始化的变量,因此默认情况下它们的值为 0)或数据段(初始化数据)。在这里,buffer1是未初始化的,因此它可能会分配在 BSS 段上,该段从数据段的末尾开始。

来自勇敢的网站:

在此处输入图像描述

于 2012-12-24T12:55:50.513 回答
1

buffer1在程序的静态(bss/data)内存部分中保留了内存。这就是所有静态变量和全局变量存在的地方。

它是第三个内存段,就像堆栈和堆一样。

于 2012-12-24T12:56:52.027 回答
0

静态声明的数组与本地声明的数组具有不同的存储规范。正如您所说,本地数组buffer2将(通常)在堆栈上创建,而静态数组buffer1将(通常)在./bss./data段上创建。

于 2012-12-24T12:57:21.890 回答