1

我知道 C 程序的内存布局分为文本、堆、堆栈、数据和 bss 段。我认为(不确定)仅此内存布局就是维护不同存储类变量的范围和生命周期的原因。

例如,自动变量存储在堆栈中。每次发生函数调用时,都会创建一个新的堆栈帧,以限制对被调用函数的自动变量的访问。但是它们仍然在它们关联的框架内,并且一旦被调用的函数返回控制权就会开始行动。

因此,我们可以证明自动变量的范围和生命周期是合理的。但是,我想知道其他段(即数据、bss 和堆)中使用了哪些数据结构来维护这样的范围。还是控制范围和生命周期的内存布局以外的其他东西?

4

2 回答 2

2

看来,你混淆了因果。变量的范围和生命周期由语言标准决定。实施必须确保符合标准。它可能会使用一些在某个平台上很方便的内存布局,但没有必要这样做。

将段作为文本或 bbs 的内存布局基本上是执行格式的问题,而不是语言的问题。

于 2013-04-30T05:26:20.417 回答
0

也就是说,可以回答最常见的情况:在其他“段”中无法控制范围或生命周期。data 和 bss(分别用于已初始化和未初始化的全局/静态变量)在进程期间使用,并且通过malloc和显式管理堆free(直到进程终止时销毁整个堆)。

我不知道“Viz”,所以我无法回答这个问题。

于 2013-04-30T05:35:35.303 回答