假设我有一个包含以下内容的文件test.c
char buffer1[1024];
int somefunction()
{
char buffer2[1024];
// do stuff
}
现在我知道buffer2是在属于某些函数调用的帧上的堆栈上分配的,但是在哪里分配了buffer1?
答案 0 :(得分:8)
这些变量通常位于BSS上(源代码中没有显式初始化的变量,因此它们默认值为0)或data segment(初始化数据)。这里,buffer1
是未初始化的,因此可能会在BSS段上分配,该段从数据段的末尾开始。
来自bravegnu网站:
答案 1 :(得分:1)
buffer1
在程序的静态(bss / data)内存部分保留了内存。这就是所有静态和全局变量的存在。
它是第三个内存段,如堆栈和堆。
答案 2 :(得分:0)
静态声明的数组与本地声明的数组具有不同的存储规范。正如您所说,将在(通常)在堆栈上创建本地数组buffer2
,而在({1}}或buffer1
段上(通常)创建静态数组./bss
。