我已经读过C中未初始化的全局变量将占用内存的.bss部分。它也只是一个占位符,不会占据目标文件中的任何空间。
我的问题是,一旦未初始化的全局变量被分配了一些值,它将在哪里存储在物理内存中?
例如:
int a[100];
int main()
{
a[10] = 25;
}
在上面的程序中,将分配内存位置在哪里?
答案 0 :(得分:7)
在存储全局变量的地方是实现定义的,C标准没有定义应该保存的位置 C标准甚至没有提到Bss段或数据段,它只定义了这些变量必须显示的行为。
答案 1 :(得分:4)
我认为你的误解是认为BSS是“永久零”的记忆。它只是程序加载映射的一部分隐式为零,因此避免在磁盘上有任何物理存储,但是否则它是标准的私有可写映射,并且在写入时立即生成。
如果您正在考虑移动,也许您会混淆虚拟和物理地址。 C中对象的虚拟地址永远不会改变,物理地址永远不会对您可见,并且永远不会重要。