使用以下代码创建了一个源文件 test1.c:
#include<stdio.h>
#include<stdlib.h>
int x = 15;
int d = 15;
int m = 18;
int k = 0;
int c = 0;
int l;
int main()
{
int y = 5;
int ma = 10;
int am = 10;
printf("Hello World\n");
return 0;
}
使用命令编译以下代码:
gcc -c test1.c
使用 size 命令检查各个内存段的大小:
size test1.o
我获得的输出:
text data bss dec hex filename
114 12 8 134 86 test1.o
而且我发现,每当我在 bss 段上方添加一个全局未初始化变量(如int l )时,它都保持不变。bss 段仅显示那些初始化为 0 的变量。但根据定义,bss 段应包含未初始化的变量。
每当我添加一个初始化的全局指针时,比如:
int *p = &x
它将数据段的大小增加了 12 而不是 8(这是我机器上整数指针的大小)。
我的解释有什么问题?