我正在使用Ubuntu 64位,我正在尝试找到以下各种变量的.bss
段的大小。
第一个程序:
#include <stdio.h>
main()
{
}
size
命令在以上程序生成的可执行文件中给出以下结果。
text data bss dec hex filename
1115 552 8 1675 68b a.out
第二个程序:
#include <stdio.h>
int a = 10;
main()
{
}
size命令在以上程序生成的可执行文件中给出以下结果。
text data bss dec hex filename
1115 556 4 1675 68b a.out
第三个程序:
#include <stdio.h>
int a;
main()
{
}
size
命令在以上程序生成的可执行文件中给出以下结果。
text data bss dec hex filename
1115 552 8 1675 68b a.out
注意:
我在编译时没有使用任何标志。
某个问题可以在以下问题吗?
1) Why `bss` is 8 bytes for first program even though there are no uninitialized global or static variables?
2) Why `bss` is reduced to 4 bytes when I added initialized global variable in second program?
3) Why `bss` is showing 8 bytes for the third program?
4) What are dec and hex in the output given by size command?
这是您的同事。您离开之前我可以告诉您您的答案。
1)为什么BSS对于第一个程序为8个字节,即使没有 非初始化的全局或静态变量?
我对此没有明确的答案。我怀疑编译器正在为某些东西使用4个字节,并且由于数据段已经为69*8 = 552,因此必须为BSS分配完整的8个字节。
2)当我添加初始化的全局时,为什么BSS减少到4个字节 第二个程序中的变量?
data bss将始终可以由8分组。由于您的程序只需要4个字节,因此编译器将未使用的字节从BSS中输入数据段。
。3)为什么BSS显示第三个程序的8个字节?
这可以追溯到1和2,当您不初始化变量时,它将被放入BSS中。此时,BSS中有2个(" A" 内部编译器变量)变量。您可以通过添加其他非初始化变量来对其进行测试。您添加的所有其他变量(从第一个开始,如果BSS为4)将使BSS增加8。
4)大小命令给出的输出中的DEC和十六进制是什么?
数据 文本 bss = dec,在十六进制中相同的值
希望这会有所帮助。如果您想了解更多,请在我的桌子上摆动。