众所周知,c语言中有全局变量,局部变量,常量数据。。。
其中,全局变量又有初始化和不初始化。
int array[1024];
int main()
{
return 0;
}
lyh@debian:~/test$ gcc -g bss.c -o bss
lyh@debian:~/test$ objdump -h bss | grep bss
bss:
file format elf32-i386
24 .bss 00001020 08049580 08049580 00000568 2**5
lyh@debian:~/test$ ls -l
bss
-rwxr-xr-x 1 lyh lyh 5395 4月 26 18:29 bss
(bss段用来存放未初始化的全局变量)
上面代码中全局变量未初始化,全局变量array 4k的数据存放在bss中。
int array[1024] = {1};
int main()
{
return 0;
}
lyh@debian:~/test$ gcc -g data.c -o data
lyh@debian:~/test$ objdump -h data | grep\\.data
23 .data 00001020 08049560 08049560 00000560 2**5
lyh@debian:~/test$ ls -l data
-rwxr-xr-x 1 lyh lyh 9520 4月 26 18:35 data
(.data段用来存放初始化了的全局变量)
上面代码中全局变量初始化了,全局变量array 4k的数据存放在.data中。发现data文件的大小为9520,也就是说初始化了的全局变量的大小会加入到文件大小中,同时又会占内存。
所以我们在定义全局变量的时候,要考虑要不要初始化,能不初始化就不初始化,毕竟会增大文件的大小。
如果我们把全局变量初始化为0时,会发生什么呢?
int array[1024] = {0};
int main()
{
return 0;
}
lyh@debian:~/test$ objdump -h data | grep\\.data
23 .data 00000008 08049560 08049560 00000560 2**2
当我们查看.data时发现初始化为0的全局变量array竟然不是存储在.data段中。
lyh@debian:~/test$ objdump -h data | grep bss
24 .bss 00001020 08049580 08049580 00000568 2**5
查看bss段,发现array存放在该段里 编译器会把该全局变量当作没初始化处理,即把全局变量存到bss段中。所以可以得出bss段是用来存放未初始化或者初始化为0的全局变量。 -------本人菜鸟一只,如有错误,大牛们指出^_^