當前位置:首頁 » 編程軟體 » 編譯bss

編譯bss

發布時間: 2022-08-04 22:09:24

編譯器編譯高級語言為低級語言的時候,給全局變數或靜態變數是如何分配內存的

對於C和C++的編譯器,全局變數和靜態變數都是在專門的數據區保存的,更具體一點,一般是在.data和.bss段保存的,具體在哪個段,編譯器會根據代碼中是否對這些變數進行了初始化來決定,如果初始化過,並且初始化的值不為0,那麼這個這個變數一般就會被放在編譯結果的.data段中,否則就是放在.bss段中。
.data段中就保存變數的符號,還保存變數的初始化值,而在.bss段中,只保存變數的符號,而不保存值,這是因為這部分的變數都將被初始化為0,這也是為什麼static聲明的變數即使沒有初始化也會是0的原因。
這些段都會在程序被執行的時候由操作系統(或鏈接器)載入到指定的內存中,便完成相應的初始化。

❷ mac book pro下如何編譯和運行匯編程

匯編程序由定義好的段構成,每個段都有不同的目的,三個最常用的段:

1)data 段

匯編程序data(數據)段是可選的。

數據段聲明帶有初始值的數據元素,這些數據元素用作匯編程序的變數。

2)bss 段

匯編程序bss段 是可選的。

bss段聲明使用零(或 NULL)值初始化的數據元素。這些元素最常用作匯編程序中的緩沖區

3)text 段

匯編程序必須有 text(文本)段。

這個段是 在可執行程序內聲明指令碼 的地方。

定義段:

GNU匯編器使用 .section 命令語句聲明段。

.section 語句只使用一個參數------它聲明的段的類型

❸ BSS的基本介紹

是「Block Started by Symbol」的縮寫,意為「以符號開始的塊」。
BSS是Unix鏈接器產生的未初始化數據段。其他的段分別是包含程序代碼的「text」段和包含已初始化數據的「data」段。BSS段的變數只有名稱和大小卻沒有值。此名後來被許多文件格式使用,包括PE。「以符號開始的塊」指的是編譯器處理未初始化數據的地方。BSS節不包含任何數據,只是簡單的維護開始和結束的地址,以便內存區能在運行時被有效地清零。BSS節在應用程序的二進制映象文件中並不存在。

❹ DSP編譯顯示 cannot allocate bss in SARAM 怎麼回事

SARAM的尺寸放不下未初始化段,bss是為程序中的不需要初始值的變數申請空間的段,具體可以參看編譯生成的.map文件,編譯的.cmd文件中bss段實際尺寸、bss段放置位置,和SARAM中實際剩餘空間尺寸。

❺ BSS是什麼意識

BSS全名為:Base Station Subsystem,GSM網路中的基站子系統模塊 。
WLAN中的BSS:一種特殊的Ad-hoc LAN的應用,稱為Basic Service Set (BSS),一群計算機設定相同的BSS名稱,即可自成一個group,而此BSS名稱,即所謂BSSID。
是「Block Started by Symbol」的縮寫,意為「以符號開始的塊」。
BSS是Unix鏈接器產生的未初始化數據段。其他的段分別是包含程序代碼的「text」段和包含已初始化數據的「data」段。BSS段的變數只有名稱和大小卻沒有值。此名後來被許多文件格式使用,包括PE。「以符號開始的塊」指的是編譯器處理未初始化數據的地方。BSS節不包含任何數據,只是簡單的維護開始和結束的地址,以便內存區能在運行時被有效地清零。BSS節在應用程序的二進制映象文件中並不存在。
在採用段式內存管理的架構中(比如intel的80x86系統),bss段(Block Started by Symbol segment)通常是指用來存放程序中未初始化的全局變數的一塊內存區域,一般在初始化時bss 段部分將會清零。bss段屬於靜態內存分配,即程序一開始就將其清零了。
比如,在C語言之類的程序編譯完成之後,已初始化的全局變數保存在.data 段中,未初始化的全局變數保存在.bss 段中。
text和data段都在可執行文件中(在嵌入式系統里一般是固化在鏡像文件中),由系統從可執行文件中載入;而bss段不在可執行文件中,由系統初始化。

❻ 靜態編譯 64位系統 Bss段大小最大是多少

39KB。
在BSS段,則可執行文件將開辟一個10000大小的空間,並全部存儲為0,int為4位元組的情況下,該變數將在磁碟上佔用39KB的空間。但是此時若是存在BSS段,則在可執行文件中,將只是記錄現在的BSS段總大小為40000即可,而無需真正的占據39KB的空間。

靜態編譯,就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應靜態庫(.a或.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。

❼ 編譯時分配內存和運行時分配內存

編譯其實只是一個掃描過程,進行詞法語法檢查,代碼優化而已,編譯程序越好,程序運行的時候越高效。
我想你說的「編譯時分配內存」是指「編譯時賦初值」,它只是形成一個文本,檢查無錯誤,並沒有分配內存空間。

當你運行時,系統才把程序導入內存。一個進程(即運行中的程序)在主要包括以下五個分區:
棧、堆、bss、data、code

代碼(編譯後的二進制代碼)放在code區,代碼中生成的各種變數、常量按不同類型分別存放在其它四個區。系統依照代碼順序執行,然後依照代碼方案改變或調用數據,這就是一個程序的運行過程。

❽ 結構體定義編譯後是放在哪裡的 BSS段、數據段、代碼段、堆還是棧

只是自己定義了一個結構體類型,如果不定義變數,編譯後代碼 當然在代碼段;如果定義了結構體變數,則這個變數放在數據段。
舉個例子,
struct aa
{
int a;
char b;
};//這里只是聲明,當然編譯後在代碼段

你定義變數時候
int a;//系統預定義的整型,a在數據段
struct aa number;//number算是結構體類型aa,也在數據段,只是類型不是預定義而已。

ps:純手工,加分~
有問題,q我,270495267

❾ 編譯時分配內存和運行時分配內存的理解,麻煩講解下

編譯時無所謂分配內存,程序在載入後才佔用內存,不知道你說的是不是說編譯生成的目標文件所佔的空間,目標文件里的各個段.bss .data .text等都要佔據一定空間,而運行時隨時都在分配內存,堆棧都是內存。

不管是局部的還是全局靜態變數,都會佔用目標文件的空間,但是也可以不初始化,不初始化的保存在.bss段,初始化的保存在.data段。

熱點內容
安卓手機如何有蘋果的emoji 發布:2025-02-09 02:11:02 瀏覽:807
編譯原理已知語言求文法習題 發布:2025-02-09 02:05:15 瀏覽:131
中國首個具有世界影響力的編譯器 發布:2025-02-09 01:56:21 瀏覽:719
tomcat上傳超時 發布:2025-02-09 01:41:42 瀏覽:483
androidactivity豎屏 發布:2025-02-09 01:41:40 瀏覽:377
家庭配置怎麼合理 發布:2025-02-09 01:36:14 瀏覽:807
頭條軍事源碼 發布:2025-02-09 01:31:53 瀏覽:997
androidintent視頻 發布:2025-02-09 01:31:43 瀏覽:858
歐姆龍plc密碼如何設置 發布:2025-02-09 01:24:31 瀏覽:687
php支持jpeg 發布:2025-02-09 01:24:22 瀏覽:804