1. 作為函式定義的關鍵字,說明該函式是內聯函式。內聯函式會將**塊嵌入到每個呼叫該函式的地方。內聯函式減少了函式的呼叫,使**執行的效力提高,但是會增加目標**的大小,最終會使程式的**段占有大量的記憶體。
2. inline不是強制的,編譯器可以對它置之不理。例如,遞迴函式通常不會被編譯為inline函式,編譯器有權決定是否將宣告為inline的函式編譯為inline.
3. gcc編譯器,如果使用了-o3選項,一些**量小的函式會轉換為inline處理,即使這個函式沒有使用inline來宣告。
3.1 強制不內聯
3.1.1 使用標示符(noinline),如:void foo() __attribute__((noinlne));
3.1.2 將實現的這個函式寫到呼叫函式之後,就不會被強制轉換為inline了。因為編譯器gcc只強制內聯當前函式之前可見(實現**在前)的函式。
inline關鍵字 簡述
inline關鍵字 inline 內聯 函式 將普通的函式定義為inline函式,可以避免普通函式入棧出棧的開銷,它是將函式內的 直接貼上到呼叫處。除此之外,它和普通函式無其他區別。在函式宣告或定義中函式返回型別前加上關鍵字inline,即可以把函式指定為內聯函式。內聯函式的宣告和內聯函式的函式體的...
inline 關鍵字使用
inline關鍵字是用於函式宣告或定義,可以把函式指定為內聯函式,而且關鍵字inline必須與函式定義放在一起才能使函式成為內聯,僅僅將inline放在函式宣告前是不起任何作用的。inline的作用是什麼呢?為什麼要引入inline功能呢?簡單的講 inline的作用與 巨集定義 作用相同,但是又不...
關鍵字 volatile關鍵字的作用
1.volatile關鍵字是防止在共享的空間發生讀取的錯誤。只保證其可見性,不保證原子性 使用volatile指每次從記憶體中讀取資料,而不是從編譯器優化後的快取中讀取資料,簡單來講就是防止編譯器優化。2.在單任務環境中,如果在兩次讀取變數之間不改變變數的值,編譯器就會發生優化,會將ram中的值賦值...