BSS段和資料段的區別

2021-07-23 17:28:07 字數 516 閱讀 9509

bss段:bss段(bss segment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。

資料段:資料段(data segment)通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域。資料段屬於靜態記憶體分配。

全域性的未初始化變數存在於bss段中,具體體現為乙個佔位符;全域性的已初始化變數存於data段中;而函式內的自動變數都在棧上分配空間。bss是不占用.exe檔案空間的,其內容由作業系統初始化(清零);而data卻需要占用,其內容由程式初始化,因此造成了上述情況。

bss段(未手動初始化的資料)並不給該段的資料分配空間,只是記錄資料所需空間的大小。

data(已手動初始化的資料)段則為資料分配空間,資料儲存在目標檔案中。 資料段包含經過初始化的全域性變數以及它們的值。bss段的大小從可執行檔案中得到 ,然後鏈結器得到這個大小的記憶體塊,緊跟在資料段後面。當這個記憶體區進入程式的位址空間後全部清零。包含資料段和bss段的整個區段此時通常稱為資料區。

bss段和 data段的區別

在採用段式記憶體管理的架構中 比如intel的80x86系統 bss段 block started by symbol segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,一般在初始化時bss 段部分將會清零。bss段屬於靜態記憶體分配,即程式一開始就將其清零了。比如,在c語...

彙編 在bss段和data段宣告資料的區別

在bss段中宣告資料的乙個好處是資料不包含在可執行的程式中。在資料段中定義資料時必須被包含在可執行的程式中,因為必須使用特定值初始化。test1.s section text global start start movl 1,eax movl 0,ebx int 0x80執行 as o test1...

Text段 Data段和BSS段

不同的compiler在編譯的過程中對於儲存的分配可能略有不同,但基本結構大致相同。大體上可分為三段 text段 data段和bss段。text段用於存放 通常情況下在記憶體中被對映為唯讀,但data和bss是可寫的。資料存放通常分成如下幾個部分 1 棧 由編譯器自動分配,儲存函式的區域性變數和引數...