全局變量、靜態變量賦值爲0時存儲在bss段的測試

全局變量和靜態變量一般存儲在讀寫段,不賦值自然存儲在bss段,但是如果賦值爲0的話存儲在bss段,而不是讀寫段。

測試程序:

#include <stdio.h>
int global_a0=0;
int global_a1=1;
int global_anull;

int main(){
        static int static_b0=0;
        static int static_b1=1;
        static int static_bnull;
        printf("global_a0:   %p\n",&global_a0);
        printf("global_a1:   %p\n",&global_a1);
        printf("global_anull:%p\n",&global_anull);

        printf("static_b0:   %p\n",&static_b0);
        printf("static_b1:   %p\n",&static_b1);
        printf("static_bnull:%p\n",&static_bnull);
        return 0;
}

內存形態如下:

這裏我們不討論堆棧,那是存儲局部變量的地方,上面程序在64位機器編譯的結果爲:

根據內存地址我們可以瞭解到(由於地址只有後兩位不一樣,我只寫後兩位地址。

結論:由此可以知道,global_a0和static_b0都存在bss段。

size命令(unix系統)可以查看bss段大小信息

size 可執行文件 

例子:size a.out

可以看到bss段大小爲24字節。數據段,text段同理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章