当前位置:   article > 正文

ELF中的.data段和.bss段_elf .data

elf .data

.data 段

  • 已初始化的全局变量和局部静态变量都保存在 .data 段。

.bss 段

  • 未初始化的全局变量和局部静态变量默认值都为 0,本来它们也可以被放在 .data 段的,但是因为它们都是 0,所以为它们在 .data 段分配空间并且存放数据 0 是没有必要的。

  • 程序运行的时候它们的确是要占内存空间的,并且可执行文件必须记录所有未初始化的全局变量和局部静态变量的大小总和,记为 .bss 段。

  • 因此,.bss 段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内容,所以它在文件中也不占据空间。

备注:
是否将未初始化的全局变量放在 .bss 段跟不同的语言与不同的编译器实现有关,有些编译器会将未初始化的全局变量存放在目标文件 .bss 段,有些则不存放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候再在 .bss 段分配空间。

查看段大小的命令:

  1. $ objdump -h elf_file
  2. $ size elf_file

 

 

参考资料:

1、《程序员的自我修养--链接、装载与库》,俞甲子,石凡,潘爱民,电子工业出版社。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/319453
推荐阅读
相关标签
  

闽ICP备14008679号