Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我有一个文件 test.c 包含:
char buffer1[1024]; int somefunction() { char buffer2[1024]; // do stuff }
现在我知道 buffer2 是在属于 somefunction 调用的帧上的堆栈上分配的,但是 buffer1 分配在哪里?
这些变量通常位于BSS(在源代码中没有显式初始化的变量,因此默认情况下它们的值为 0)或数据段(初始化数据)。在这里,buffer1是未初始化的,因此它可能会分配在 BSS 段上,该段从数据段的末尾开始。
buffer1
来自勇敢的网站:
buffer1在程序的静态(bss/data)内存部分中保留了内存。这就是所有静态变量和全局变量存在的地方。
它是第三个内存段,就像堆栈和堆一样。
静态声明的数组与本地声明的数组具有不同的存储规范。正如您所说,本地数组buffer2将(通常)在堆栈上创建,而静态数组buffer1将(通常)在./bss或./data段上创建。
buffer2
./bss
./data