C程序中未初始化的内存位置的物理内存位置?

时间:2012-02-06 15:51:48

标签: c

我已经读过C中未初始化的全局变量将占用内存的.bss部分。它也只是一个占位符,不会占据目标文件中的任何空间。

我的问题是,一旦未初始化的全局变量被分配了一些值,它将在哪里存储在物理内存中?

例如:

int a[100];

int main()
{
    a[10] = 25;
}

在上面的程序中,将分配内存位置在哪里?

2 个答案:

答案 0 :(得分:7)

在存储全局变量的地方是实现定义的,C标准没有定义应该保存的位置 C标准甚至没有提到Bss段或数据段,它只定义了这些变量必须显示的行为。

答案 1 :(得分:4)

我认为你的误解是认为BSS是“永久零”的记忆。它只是程序加载映射的一部分隐式为零,因此避免在磁盘上有任何物理存储,但是否则它是标准的私有可写映射,并且在写入时立即生成。

如果您正在考虑移动,也许您会混淆虚拟和物理地址。 C中对象的虚拟地址永远不会改变,物理地址永远不会对您可见,并且永远不会重要。