C言語KEIL的ARM編譯器對RW和ZI段的處理_第1頁
C言語KEIL的ARM編譯器對RW和ZI段的處理_第2頁
C言語KEIL的ARM編譯器對RW和ZI段的處理_第3頁
C言語KEIL的ARM編譯器對RW和ZI段的處理_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——C言語KEIL的ARM編譯器對RW和ZI段的處理C言語KEIL的ARM編譯器對RW和ZI段的處理

按照C編譯器編譯的結果,一般會產生RO段,RW段,ZI段。RO是程序中的指令和常量,RW是程序中的已初始化全局變量,ZI是程序中的未初始化或初始化為零的全局變量。下面是我為大家帶來的C言語KEIL的ARM編譯器對RW和ZI段的處理的學識,接待閱讀。

C言語KEIL的ARM編譯器對RW和ZI段的處理

按照C編譯器編譯的結果,一般會產生RO段,RW段,ZI段。RO是程序中的指令和常量,RW是程序中的已初始化全局變量,ZI是程序中的未初始化或初始化為零的全局變量。

那么如下的代碼

intaaa;

intbbb;

intmain

aaa=7;

bbb=8;

return0;

理應產生的是八個字節的ZI段,但很古怪,--bss_threshold=0

ProgramSize:Code=464RO-data=268RW-data=8ZI-data=608

如上所示,其中的Code段,RO-data段和ZI-data段是啟動代碼產生的,這里不深究。

它產生了8個字節的RW段,可以分析產生的map文件查看main匯編代碼和RW段,察覺確實將aaa和bbb調配在了RW段。

map文件中的符號如下:

aaa0x20000000Data4main.o.data

bbb0x20000004Data4main.o.data

ExecutionRegionRW_IRAM1Base:0x20000000,Size:0x00000268,Max:0x00001000,ABSOLUTE

BaseAddrSizeTypeAttrIdxESectionNameObject

0x200000000x00000008DataRW11.datamain.o

想想沒道理,嘗試察覺初始化了的全局變量也是放在RW段。

結果察覺罪魁禍首是KEIL的armcc的“--bss_threshold=num”這個編譯選項,查看手冊介紹如下:

ThisoptioncontrolstheplacementofsmallglobalZIdataitemsinsections.AsmallglobalZIdataitemisanuninitializeddataitemthatiseightbytesorlessinsize.

--bss_threshold=num

where:

num

iseither:

placesmallglobalZIdataitemsinZIdatasections

placesmallglobalZIdataitemsinRWdatasections.

InARMCompiler4.1andlater,thecompilermightplacesmallglobalZIdataitemsinRWdatasectionsasanoptimization.InRVCT2.0.1andearlier,smallglobalZIdataitemswereplacedinZIdatasectionsbydefault.

Use--bss_threshold=0toemulatethebehaviorofRVCT2.0.1andearlierwithrespecttotheplacementofsmallglobalZIdataitemsinZIdatasections.

將對比小的'全局ZI變量存放到RW段當中作為優化手段,默認是小于8個字節的當做smallglobalZIdata,也就是說char,int這些類型全部會放到ZI,除非是大于8個字節的數組。

知道這個之后在編譯選項里面添加--bss_threshold=0就可以將其恢復到正常的ZI段中了。

gcc的a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論