我正在使用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?
答案 0 :(得分:3)
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个(&#34; a&#34; +内部编译变量)变量。您可以通过添加其他未初始化的变量来测试它。您添加的每个其他变量(从第一个开始,如果bss为4)将使bss增加8。
4)size命令给出的输出中的dec和hex是什么?
data + text + bss = dec,十六进制相同的值
希望这会有所帮助。 如果您想了解更多信息,请在我的办公桌前摆动。