BSS段在c,进展的方式

BSS segment in c, way of progress

本文关键字:方式 段在 BSS      更新时间:2023-10-16

我是c编程的新手,我正在努力更好地了解关于c程序内存布局的变量保存位置。

我得到了以下代码:

int addr5;              
int addr6;
/*code continues*/
int main (int argc, char** argv){
    printf("- &addr5: %pn",&addr5);        
    printf("- &addr6: %pn",&addr6);
/*code continues*/

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

  • &addr5:0x804a034
  • &addr6:0x804a030

现在,根据我所读到的内容,我发现堆内存从较低的值开始(并随着时间的推移而增长)并且堆栈内存从高值开始(随着时间的推移,还有dec)。

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

addr6不应该大于addr5吗?

谢谢。

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

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