c語言中的各種變量是如何存儲的(-)

                                                                        衆所周知,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的全局變量。

-------本人菜鳥一隻,如有錯誤,大牛們指出^_^

發佈了41 篇原創文章 · 獲贊 16 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章