赞
踩
.data 段:
已初始化的全局变量和局部静态变量都保存在 .data 段。
.bss 段:
未初始化的全局变量和局部静态变量默认值都为 0,本来它们也可以被放在 .data 段的,但是因为它们都是 0,所以为它们在 .data 段分配空间并且存放数据 0 是没有必要的。
程序运行的时候它们的确是要占内存空间的,并且可执行文件必须记录所有未初始化的全局变量和局部静态变量的大小总和,记为 .bss 段。
因此,.bss 段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内容,所以它在文件中也不占据空间。
备注:
是否将未初始化的全局变量放在 .bss 段跟不同的语言与不同的编译器实现有关,有些编译器会将未初始化的全局变量存放在目标文件 .bss 段,有些则不存放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候再在 .bss 段分配空间。
查看段大小的命令:
- $ objdump -h elf_file
-
- $ size elf_file
参考资料:
1、《程序员的自我修养--链接、装载与库》,俞甲子,石凡,潘爱民,电子工业出版社。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。