C中的BSS段,进展方式

BSS segment in c, way of progress

我是 C 语言编程的新手,我试图更好地理解与 C 程序的内存布局相关的变量保存位置。

我得到了以下代码:

int addr5;              
int addr6;

/*code continues*/

int main (int argc, char** argv){

    printf("- &addr5: %p\n",&addr5);        
    printf("- &addr6: %p\n",&addr6);

/*code continues*/

现在,当我 运行 这段代码时,我得到了:

现在,根据我所读的内容,我了解到堆内存从较低的值开始(并随着我们的继续增长) 并且堆栈内存从高值开始(并且随着我们的继续而减少)。

因为我将 addr5 和 addr6 保存为未初始化的 var,并且在函数 scoop 之外,难道它们不应该保存在 BSS 段中吗? 如果是这样,bss 段不是随着我们的增长而增长吗,因为它在堆中?

addr6 不应该比 addrs5 大,因为它是稍后初始化的吗?

谢谢。

不,.bss 段不在堆中。 .bss 段和.data 段是固定大小的段,通常在地址space 中靠近堆,但它们与堆明显不同。

不,.bss 部分不会增长。您在程序中定义的全局变量的数量在程序执行期间保持不变。如果加载动态库,那么该动态库将有自己的 .bss 段,该段被放置到地址 space.

中的另一个位置