衆所周知,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的全局變量。
-------本人菜鳥一隻,如有錯誤,大牛們指出^_^