【发布时间】:2020-01-02 10:59:18
【问题描述】:
我了解.bss 的默认对齐方式是 GCC 的 8 个字节,如本问题 Why the int type takes up 8 bytes in BSS section but 4 bytes in DATA section 中所述
所以有了这个程序:
int main(){
return 0;
}
我有这样的事情:
text data bss dec hex filename
1418 544 8 1970 7b2 test
当我添加一个带有初始化的静态变量以增加.data(确实如此)时:
static int var = 255;
int main(){
return 0;
}
我看到.bss 的大小也减少了 4 个字节:
text data bss dec hex filename
1418 548 4 1970 7b2 test
请告诉我为什么?
【问题讨论】:
-
.bss 不应该占用任何内存。我猜这种行为可能是由于对齐。它依赖于编译器的实现。
-
您是否尝试过查看
readelf、nm等的输出,看看是否可以确定bss 中的地址[es] 处的符号是什么? -
@R..GitHubSTOPHELPINGICE 是的,我做到了,我也在查看 gcc 的默认链接器文件,因为我使用的是默认链接器文件。我想是从
.bss和.data的对齐方式上来的,但还是没弄明白其中的逻辑。 -
我无法重现这个。您使用哪个编译器版本和标志编译了哪个架构?
标签: c gcc memory-management