關於bss段的理解

2021-09-05 09:50:43 字數 493 閱讀 6580

.bss不佔據程式可執行程式大小,只在段表中記錄大小,在符號表中記錄符號。當檔案載入執行時,才分配空間以及初始化。

bss段的大小,記錄在段表裡裡,記錄的是所有未初始化變數總共的大小,bss段只在段表裡有個記錄,但實現並不存在這個段.

static int g;

static short int h;

int main(){}

用readelf -s 或 objdump -h 檢視段表:

每個未初始化的變數的大小放在了符號表裡。

你看下面符號表中的4 ,2分別就是g,h的大小。

用readelf -s 或 objdump -t 檢視符號表:

程式bss段的新理解

1 未初始化或初始化為0的 全域性變數和static變數 存於bss段。之前的錯誤認識 只區別初始化和未初始化,把初始為0歸為初始化。2 最後轉換成的二進位制檔案,bss段只包含起始位址和結束位址 或大小 3 常量的儲存在這裡被歸為 段了。其中常量 唯讀變數存於rodata 初始化 不是0 的全域性...

關於bss段的一些思考

bss段是用來存放 未初始化的全域性變數 未初始化的靜態區域性變數 初始化為0的全域性變數 部分編譯器會將它放到data段 初始化為0的靜態區域性變數 部分編譯器會將它放到data段 bss段在elf格式的可執行檔案中是不占用空間的,只會記錄它的大小等一些標記性資料,具體細節不討論。作業系統下的應用...

C 和C關於BSS段的區別

當編譯器遇到如下定義 point global 觀念上point的 trivial construction 和 destruction 都會被產生和呼叫,事實上,這些 trival members 要麼沒被產生,要麼沒被呼叫。在c中,global被視為乙個 臨時性的定義 因為他沒有顯示化的初始化操...