来自我的书:
.bss:
未初始化的全局 C 变量
COMMON:
尚未分配的未初始化数据对象
我不得不说,我并没有看到明显的区别。我什至不太明白什么是未初始化、未分配的数据对象......似乎什么都没有。我用过 GNUreadelf
工具尝试查看一些简单的 C 代码,但找不到单个 COMMON 符号。我读过像 FORTRAN's COMMON type is an example of a COMMON symbol 这样的东西 - 但我不知道 FORTRAN
有人可以帮我区分这两者吗?如果可能的话,希望有一个 C 示例吗?不胜感激。
edit: from this https://stackoverflow.com/questions/5443474/what-is-the-section-for-uninitialized-global-data发布,变量 c 在这里:
int c;
int main() {} ...
应该是常见的。但使用objdump -t
向我显示 c 在 .bss 中...
confused
// file a.c
// file-scope
int a = 0; // goes into BSS
编译后a.c
进入目标文件a.o
, a
符号进入 BSS 部分。
// file b.c
// file-scope
int b; // goes into COMMON section
编译后b.c
进入目标文件b.o
, b
符号进入 COMMON 部分。
链接后a.o
and b.o
, both a
and b
符号进入 BSS 部分。公共符号只存在于目标文件中,不存在于可执行文件中。 Unix 中 COMMON 符号的思想是在某些条件下允许在单个公共符号下对同一个变量(在不同的编译单元中)进行多个外部定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)