Go語言 inline 內(nèi)聯(lián)的策略與限制

內(nèi)聯(lián),就是將一個(gè)函數(shù)調(diào)用原地展開,替換成這個(gè)函數(shù)的實(shí)現(xiàn)。盡管這樣做會增加編譯后二進(jìn)制文件的大小,但是它可以提高程序的性能。內(nèi)聯(lián)是高性能編程的一種重要手段。每個(gè)函數(shù)調(diào)用都有開銷:創(chuàng)建棧幀,讀寫寄存器,這些開銷可以通過內(nèi)聯(lián)避免。如果一個(gè)函數(shù)足夠小,那調(diào)用這個(gè)函數(shù)的開銷就顯得昂貴,對于大函數(shù)編譯器也會直接調(diào)用,放棄內(nèi)聯(lián)。

使用 go build -gcflags="-m" xxx.go 可顯示被內(nèi)聯(lián)的函數(shù)

使用 go build -gcflags="-m -m" xxx.go可以看到為什么沒有被內(nèi)聯(lián)原因:

包含以下內(nèi)容的方法都不會被內(nèi)聯(lián):閉包調(diào)用,select,for,defer,go關(guān)鍵字創(chuàng)建的協(xié)程。并且除了這些,還有其它的限制。當(dāng)解析AST時(shí),Go申請了80個(gè)節(jié)點(diǎn)作為內(nèi)聯(lián)的預(yù)算。當(dāng)一個(gè)函數(shù)的開銷超過了這個(gè)預(yù)算,就無法內(nèi)聯(lián)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 統(tǒng)一規(guī)范篇 命名篇 開發(fā)篇 優(yōu)化篇 統(tǒng)一規(guī)范篇 本篇主要描述了公司內(nèi)部同事都必須遵守的一些開發(fā)規(guī)矩,如統(tǒng)一開...
    零一間閱讀 2,152評論 0 2
  • 參考:https://www.cnblogs.com/shijingxiang/articles/12200355...
    碼二哥閱讀 698評論 0 0
  • 閱讀前請悉知:本文是一篇翻譯文章,出于對原文的喜愛與敬畏,所以需要強(qiáng)調(diào):如果讀者英文閱讀能力好,請直接移步文末原文...
    wu_sphinx閱讀 2,706評論 5 5
  • 零 前置知識 操作系統(tǒng)的每個(gè)進(jìn)程都認(rèn)為自己可以訪問計(jì)算機(jī)的所有物理內(nèi)存,但由于計(jì)算機(jī)必定運(yùn)行著多個(gè)程序,每個(gè)進(jìn)程都...
    voidFan閱讀 1,490評論 0 1
  • 函數(shù)是一個(gè)可以重復(fù)使用的代碼塊,CPU 會一條一條地挨著執(zhí)行其中的代碼。CPU 在執(zhí)行主調(diào)函數(shù)代碼時(shí)如果遇到了被調(diào)...
    咻比嘟嘩丶閱讀 370評論 0 2

友情鏈接更多精彩內(nèi)容