我正在使用测试程序来了解linux 6.3上的C内存模型,并使用了内核版本2.6.32-279.el6.x86_64。在bss和数据段中的整数可变大小
首先我必须编译下面的代码,
#include <stdio.h>
int main(void)
{
static int i = 100; /* Initialized static variable stored in DS*/
return 0;
}
上运行大小命令,我在下面了,
[[email protected] jan14]# size a.out
text data bss dec hex filename
1040 488 16 1544 608 a.out
那么,消除了对静态变量“我”的intialization后,我的代码变得,
include <stdio.h>
int main(void)
{
static int i ;
return 0;
}
在编译上面的运行大小后,
[[email protected] jan14]# size a.out
text data bss dec hex filename
1040 484 24 1548 60c a.out
bss部分有8个字节增量,但数据部分只有4个字节减少。为什么在移动到bss段时大小是整数倍?
我已经测试过这个角色并且漂浮了,观察到了相同的行为。
您可能希望仔细观察目标文件,生成的汇编代码和链接描述文件,以及可能的编译器和/或链接器源代码(如果使用的是例如。铛/ GCC和GNU ld)。 –