什麼是bss段

2021-04-15 08:18:04 字數 613 閱讀 4031

乙個程式本質上都是由 bss段、data段、text段三個組成的。這樣的概念,不知道最初**於**的規定,但在當前的計算機程式設計中是很重要的乙個基本概念。而且在嵌入式系統的設計中也非常重要,牽涉到嵌入式系統執行時的記憶體大小分配,儲存單元占用空間大小的問題。

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

比如,在c語言之類的程式編譯完成之後,已初始化的全域性變數儲存在.data 段中,未初始化的全域性變數儲存在.bss 段中。

在《programming ground up》裡對.bss的解釋為:there is another section called the .bss. this section is like the data section, except that it doesn』t take up space in the executable.

text和data段都在可執行檔案中(在嵌入式系統裡一般是固化在映象檔案中),由系統從可執行檔案中載入;而bss段不在可執行檔案中,由系統初始化。

Text段 Data段和BSS段

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

bss段為什麼需要初始化?

我們都知道 bss段需要初始化,但是這是為什麼呢?通過瀏覽資料,我們都會發現,bss bin hex 中的,因為全都是 0bss bss段 一堆 0 將來真正執行程式的時候,再根據這兩個資料進行 bss段的初始化就行了。以上這段文字是網上的資料說的。但是,我可不可以讓 bssnandflash 拷貝...

bss段和 data段的區別

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