C的每个内存布局段中的哪个数据结构?

时间:2013-04-30 04:40:43

标签: c memory-management

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

尽管如此,人们可以回答最常见的情况:在其他“细分”中无法控制范围或生命周期。数据和bss(分别用于初始化和非初始化的全局/静态变量)是在进程的持续时间内,并且通过mallocfree显式管理堆(直到整个堆被销毁时)该过程终止)。

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