【问题标题】:Physical memory location of uninitialised memory location in C program?C程序中未初始化内存位置的物理内存位置?
【发布时间】:2012-02-06 15:51:48
【问题描述】:

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

我的问题是,一旦为未初始化的全局变量分配了某个值,它将存储在物理内存的什么位置?

例如:

int a[100];

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

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

【问题讨论】:

  • 值得注意的是,C 根本没有内存模型

标签: c


【解决方案1】:

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

【讨论】:

  • 即便如此,BSS 和数据段也是虚拟内存中的位置,而不是物理内存中的位置。
【解决方案2】:

我认为您的误解是认为 BSS 是“永久为零”的内存。它只是程序加载映射的一部分,隐式为零,因此避免了磁盘上的任何物理存储,但除此之外,它是标准的私有可写映射,并在写入后立即呈现物理存在。

如果您考虑移动它,那么您可能会混淆虚拟地址和物理地址。 C 中对象的虚拟地址永远不会改变,物理地址对您来说永远是不可见的,也不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2016-08-01
    • 2016-09-23
    相关资源
    最近更新 更多