內聯的優缺點
定義和機制
行內函數是指用inline關鍵字修飾的函式。在類內定義的函式被預設成行內函數。行內函數從原始碼層看,有函式的結構,而在編譯後,卻不具備函式的性質。
行內函數不是在呼叫時發生控制轉移,而是在編譯時將函式體嵌入在每一個呼叫處。編譯時,類似巨集替換,使用函式體替換呼叫處的函式名。一般在程式碼中用inline修飾,但是能否形成行內函數,需要看編譯器對該函式定義的具體處理。
優點
1、行內函數,編譯器將會根據上下文環境進一步深度優化程式碼,而這一點是普通函式無法達到的作用
2、省略了函式呼叫壓入堆疊和彈出堆疊所用的時間
3、常用於高頻使用的函式,可以提高時間
缺點
1、編譯之後程式碼量會偏多,內聯可以說是一種以空間換取時間的方法。犧牲一定的空間來加速執行時間。增加的程式碼量取決於函式呼叫次數和函式本身的大小
2、行內函數實現的更改往往並不可以保持連結相容性,也就是說這樣的更改需要使用者重新編譯他們的程式碼
綜述與注意
1、inline實現其實就是對編譯器的一種請求,因此編譯器完全有權利取消一個函式的內聯請求。一個好的編譯器會根據函式定義體,自動取消不值得的內聯,一般編譯器會自動過濾選擇一些短小而簡單的函式來內聯
2、使用行內函數的時候要注意:
(1)遞迴函式不能定義為行內函數
(2)行內函數一般適合於不存在while和switch等複雜的結構且只有1~5條語句的小函式上,否則編譯系統將該函式視為普通函式。
(3)行內函數只能先定義後使用,否則編譯系統也會把它認為是普通函式。
(4)對行內函數不能進行異常的介面宣告。
相關文章
- 物聯網路卡的優缺點
- 內部區塊鏈的優缺點區塊鏈
- Docker的優缺點Docker
- 繼承的優缺點繼承
- MySQL索引的優缺點MySql索引
- RabbitMQ優缺點MQ
- MapReduce優缺點
- Hive 優缺點Hive
- 常見物聯網模型優缺點簡介模型
- 繼承的優點和缺點繼承
- MyBatis的優缺點以及特點MyBatis
- 節點快取的優缺點快取
- HTTPS 優點與缺點HTTP
- 物聯網常見的十種定位技術的優缺點
- SAP的概念及優缺點
- 閉包的概念?優缺點?
- Base64 的優缺點
- kafka的優缺點都有那些Kafka
- 6.iframe的優缺點
- 關於 Cookie的優缺點Cookie
- HTTP和RPC的優缺點HTTPRPC
- PyLint 的優點、缺點和危險
- 串列埠、IIC、SPI的優缺點串列埠
- 單頁應用的優缺點
- 雲伺服器的優缺點伺服器
- 資料中心代理的優缺點
- 代理伺服器的優缺點伺服器
- 02 SVN 與 Git 的優缺點Git
- serverless與容器優缺點Server
- HTTP1.1 優缺點HTTP
- hadoop-HDFS優缺點Hadoop
- Ajax原理以及優缺點
- iframe有哪些優點和缺點?
- 遞迴與迭代的聯絡以及優缺點(以c++為例)遞迴C++
- 多層PCB的優點和缺點有哪些?
- Python語言的優缺點詳解!Python
- Python 字串不可變性的優缺點Python字串
- HTTPS協議的優缺點有哪些?HTTP協議