我正在使用測試程序來了解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)。 –