簡體   English   中英

如何創建函數的內聯副本

[英]How can i create an inline copy of an function

我想要一個功能,也有一個內聯版本。 我希望它們是相同的。

這會更有效率,還是有比手工復制更好的方法?

void inline in_function(int a) {
  printf("%d", a);
}
void function(int a) {
  in_function(a);
}

首先,需要了解內聯函數與普通函數內部結構。 那些可能是

匯編

普通函數編譯

對於普通函數,編譯器執行“JUMP”或“LONG JUMP”指令以到達函數定義。

內聯函數

當編譯器遇到內聯函數時,編譯器會替換函數調用並將整個函數體插入代碼中。 這個過程叫做膨脹

高架

通常,在執行到正常函數的過程中,代碼執行器需要對函數定義進行“跳轉”或“長跳轉”,為此,執行器需要將當前所有的cpu寄存器壓入堆棧並執行跳。 這會產生額外的開銷,而對於內聯函數則不會發生這種情況。

內存使用情況

內聯函數,因為它們在幾個地方重復擴展,浪費內存,但提供了比普通函數更好的性能優勢。 普通函數調用節省內存,但瓶頸是性能下降

何時使用內聯函數

如果跳轉到函數調用所需的時間超過了執行該函數所需的時間,則不建議將其與普通函數分段,而是出於此類目的使用內聯函數。

結論

void inline in_function(int a) {
    printf("%d", a);
}
void function(int a) {
    in_function(a);
}

最后,上述在普通函數中調用內聯函數的方式與普通函數的思想和內聯函數的用法和原則背道而馳。 因為它不提供性能或內存優勢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM