內(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)。