__attribute__((section(”name“)))的一些理解


__attribute__((section(”name“)))是gcc編譯器支持的一個編譯特性(arm編譯器也支持此特性),實現在編譯時把某個函數/數據放到name的數據段中。

__attribute__主要用於改變所聲明或定義的函數或 數據的特性,它有很多子項,用於改變作用對象的特性。比如對函數,noline將禁止進行內聯擴展、noreturn表示沒有返回值、pure表明函數除 返回值外,不會通過其它(如全局變量、指針)對函數外部產生任何影響。當然,__attribute__肯定有很多的用法,今天就用到了section部分,所以就只針對這個做一些記錄。

提到section,就得說RO RI ZI了,在ARM編譯器編譯之后,代碼被划分為不同的段,RO Section(ReadOnly)中存放代碼段和常量,RW Section(ReadWrite)中存放可讀寫靜態變量和全局變量,ZI Section(ZeroInit)是存放在RW段中初始化為0的變量。


於是本文的大體意思就清晰了,__attribute__((section("section_name"))),其作用是將作用的函數或數據放入指定名為"section_name"對應的段中。


免責聲明!

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



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