內聯擴充套件

內聯擴充套件是編譯程式碼中的常見優化,它優先考慮二進位制大小的效能。它允許編譯器用函式的實際主體替換函式呼叫; 在編譯時有效地將程式碼從一個地方複製/貼上到另一個地方。由於呼叫站點被擴充套件為僅包含編譯器為函式生成的機器指令,因此我們不必執行 CALL 或 PUSH(GOTO 語句或堆疊幀推送的 x86 等效項)或其他等效項。架構。

內聯器根據一些啟發式方法決定是否行內函數,但通常預設情況下為 Go inlines。因為內聯器擺脫了函式呼叫,所以它有效地決定了允許排程程式在哪裡搶佔 goroutine。

如果滿足以下任何條件,則不會行內函數呼叫(還有許多其他原因,此列表不完整):

  • 函式是可變的(例如,他們有 ... args)
  • 功能的最大毛茸茸大於預算(它們遞迴過多或因其他原因無法分析)
  • 它們包含 panicrecoverdefer