静态缓冲区在哪里分配?

时间:2012-12-24 12:53:15

标签: c static

假设我有一个包含以下内容的文件test.c

char buffer1[1024];

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

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

3 个答案:

答案 0 :(得分:8)

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

来自bravegnu网站:

enter image description here

答案 1 :(得分:1)

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

它是第三个内存段,如堆栈和堆。

答案 2 :(得分:0)

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