gpt4 book ai didi

c++ - C中的BSS段,进展方式

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:17 25 4
gpt4 key购买 nike

我是 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: 0x804a034
  • &addr6: 0x804a030

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

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

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

谢谢。

最佳答案

不,.bss 段不在堆中。 .bss 段和.data 段是固定大小的段,在地址空间上通常靠近堆,但又明显区别于堆。

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

关于c++ - C中的BSS段,进展方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29236436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com