我从size
命令中得到了意外的输出。
Afaik 初始化了存储在段中的全局和静态变量data
,未初始化并初始化为存储在bss
段中的 0 个全局/静态变量。
printf("%d",sizeof(int));
给出int
大小 4。但是,bss
段data
并没有相应地增加到 4。
#include <stdio.h>
int main()
{
return 0;
}
C:\Program Files (x86)\Dev-Cpp\MinGW64\bin>size memory-layout.exe
text data bss dec hex filename
10044 2292 2512 14848 3a00 memory-layout.exe
#include <stdio.h>
int g; //uninitialised global variable so, stored in bss segment
int main()
{
return 0;
}
C:\Program Files (x86)\Dev-Cpp\MinGW64\bin>size memory-layout.exe
text data bss dec hex filename
10044 2292 2528 14864 3a10 memory-layout.exe
为什么bss
增加了 16 (2528 - 2512) 而不是 4?(在上面的代码中)
#include <stdio.h>
int g=0; //initialised to 0 so, stored in bss segment
int main()
{
return 0;
}
C:\Program Files (x86)\Dev-Cpp\MinGW64\bin>size memory-layout.exe
text data bss dec hex filename
10044 2292 2512 14848 3a00 memory-layout.exe
尽管使用了全局变量,但没有增量bss
。为什么?
#include <stdio.h>
int main()
{ static int g; //should be on bss segment
return 0;
}
C:\Program Files (x86)\Dev-Cpp\MinGW64\bin>size memory-layout.ex
text data bss dec hex filename
10044 2292 2512 14848 3a00 memory-layout.exe
bss
尽管使用了静态变量,但段中没有增量,为什么?
我还有一个问题,dec
这里代表什么?