gpt4 book ai didi

c - .bss 与普通 : what goes where?

转载 作者:太空狗 更新时间:2023-10-29 16:28:26 24 4
gpt4 key购买 nike

来 self 的书:

.bss:

Uninitialized global C variables

常见:

Uninitalized data objects that are not yet allocated

我不得不说,我看不出有什么明显的区别。我什至不太明白什么是未初始化、未分配的数据对象……似乎什么都不是。我使用 GNU 的 readelf 工具试图查看一些简单的 C 代码,但找不到一个 COMMON 符号。我读过类似 FORTRAN 的 COMMON 类型是 COMMON 符号的示例 - 但我不知道 FORTRAN

谁能帮我区分这两者?如果可能的话,希望有一个 C 例子?非常感谢。

编辑:来自this发布,变量 c 在这里:

int c;
int main() {} ...

应该是常见的。但是使用 objdump -t 向我显示 c 在 .bss 中...

困惑

最佳答案

// 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.ob.o 链接后​​,ab 符号都进入BSS 部分。公共(public)符号只存在于目标文件中,不存在于可执行文件中。 Unix 中 COMMON 符号的思想是允许在特定条件下在单个公共(public)符号下对同一变量(在不同的编译单元中)进行多个外部定义。

关于c - .bss 与普通 : what goes where?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835716/

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