.bss,.data,.text,.rodata


那天工作時候發現build的時候發現問題,

問題內容是:.text的空間太小了。

我一直以為寫代碼,就真是弄懂代碼怎么寫,式樣書怎么寫,或者弄懂代碼的問題所在,

沒有想到在build的時候出現問題。結果就是被罵了,連這個你都不懂。

工作時間查了一下。

其實基本的概念還是懂的,但是被問到.text放的是什么東西的時候,就不明白。

其實網上有很多文章。我把我查找到的文章整理一下。不過說實話,國外的文章比較詳細。

國內的文章大多數是告訴,它們代表什么,而不說明由來。

 

1,為什么會產生各個文件(.bss,.data,.text,.rodata,堆,棧,常量段)

我們現在所使用的電腦,代碼都是存在內存上的

(估計有人罵人了,這不是廢話嗎。早期的電腦,很多都是依靠硬件完成的)

因為有內存的存儲特性(變數卸載rom上就不能更改了),

所以后來改成放在內存上(flash memory的rom也應該是可以的,但是估計是讀寫速度慢,所以沒有采用)。

但是如果全都寫在內存上,就會很混亂,容易發生問題。

程序-------> 程序加載器| ----------> Flash memory

                               | ----------> SDRAM 

                               | ----------> BBRAM

為了是對文件讀取時候的方便(也有為了電腦成本降低),以便於調試器和鏈接器進行調試和鏈接。

2,系統是怎么識別數據,生成相對應的文件呢

根據文件生成區塊(section)時候內存的特性,來划分

特性:

_1,種類:

SHT_NULL 無效的區塊
SHT_PROGBITS 帶有數據(機械語和初始值等)的區塊
SHT_NOBITS 不帶有數據
SHT_RELA 帶有可再分配的數據(不依賴與內存的代碼)的區塊
SHT_REL
SHT_SYMTAB 帶有符號表的區塊

 

 

 

 

 

 

 

_2,屬性:

SHF_ALLOC 應該放在內存上的區塊
SHF_WRITE 應該放在可讀寫區域的區塊
SHF_EXECINSTR 應該放在可執行區域的區塊

 

 

 

 

 

_3,歸類

文件 種類 屬性
.bbs SHT_NOBITS SHF_ALLOC + SHF_WRITE
.data SHT_PROGBITS SHF_ALLOC + SHF_WRITE
.text SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR
.rodata SHT_PROGBITS SHF_ALLOC 
說明
主要存放0或者無初始值的全局變量和0或者無初始值的靜態局部變量
主要存放初始值是0以外的全局變量和初始值為0以外的靜態局部變量
機械語跟代碼
字符串,或者定數(const)

 

 

 

 

 

 

今天先到這里,准備睡覺了。

還有一些,棧,堆,還沒有總結,明天再看看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM