簡體   English   中英

是 <function number of lines> 和 <times function called> 內聯的反比例?

[英]Are <function number of lines> and <times function called> considered inverse proportional for inline?

我知道inline適合幾次稱為微小的身體功能。 如果呼叫數量增加,則可能導致超大代碼。 但是,僅僅召喚幾次的大型身體功能怎么樣?

我主要感興趣的是在main()中的while循環中inline一個只調用一次的大型body函數。 這個函數實際上是核心所以它是程序的90%,如上所述,每個tick執行一次。
我想,編譯器在做沒有問題inline ,因為它就像我會寫我自己的while 相反,我把它定義在其他地方,並調用它的while

編輯:
我很清楚inline更多的是編譯器決策而不是用戶,甚至甚至內聯非指定的inline函數,因此用戶控制幾乎可以忽略不計。 但這是一個原則問題加上在這個特殊情況下,它可以很好地服務。

合理的想法。 有許多編譯器可以生成鏈接時代碼。 那些可以看到你的函數只有一個調用者,並且內聯它。

然后,由於這需要生成鏈接時代碼,因此inline關鍵字無論如何都不是那么有用。

內聯函數(如果它實際上是內聯的)將完全相同,就像您將所有代碼復制到您調用函數的位置一樣。 因此,您可以輕松想象代碼有多大。

inline語句也是對編譯器的一個提示,即該函數最好內聯到調用它的代碼中。 但是根據情況,編譯器可能決定不內聯它 - 如果它認為這會更好。

您也可以找到有關內聯函數的簡短常見問題解答

內聯函數是一些簡單的函數,你不能在另一個文件中編寫,例如example.cpp,並將它包含在主類文件中,你有class name { atributes, methods ..}; 在函數前面你可以寫“內聯”,編譯器會看到它在類中寫入。 這就是我所知道的oop方式。 並且對於包含while,foor,while while循環的函數,它被重新編寫為在類函數之外而不是在內聯中編寫。這是編碼風格的問題。

你可能正在用inline咆哮錯誤的樹。 您需要使用和不使用inline來分析代碼,以了解真正的影響。 如果我是一個賭博的人,(我是),我敢打賭它不會提高性能,而且可能會使性能變差。

inline告訴你想要的函數調用進行的調用點內聯替代的編譯器,但是編譯器可以自由地忽略你的要求。 回到幾年前,采用inline作為性能增強是相當普遍的 - 有時候它會產生有益的效果,有時卻沒有。 然而,現在編譯器已經非常善於優化代碼,試圖在這方面超越編譯器是愚蠢的。 在優化代碼時,編譯器比你好得多。

此外,這些天編譯器會非常積極地忽略您的請求,以在調用站點內聯函數實現。 大多數inline請求都會被忽略。 在今天的硬件上,考慮到性能,這通常是一件好事。 內聯函數實際上可能會以您可能沒有意識到的方式阻礙性能。

這些天, inline不是一個性能工具。 相反,它是完全不同的東西。 從標准,第7.1.2 / 4節:

內聯函數應在每個使用過的翻譯單元中定義,並且在每種情況下都應具有完全相同的定義(3.2)。 [注意:在定義出現在翻譯單元之前,可能會遇到對內聯函數的調用。 -end note]如果函數的定義在第一次聲明為內聯之前出現在翻譯單元中,則程序格式錯誤。 如果在一個翻譯單元中內聯聲明具有外部鏈接的功能,則應在其出現的所有翻譯單元中內聯聲明; 無需診斷。 具有外部鏈接的內聯函數在所有翻譯單元中應具有相同的地址。 外部內聯函數中的靜態局部變量始終引用同一個對象。 extern內聯函數體中的字符串文字是不同翻譯單元中的相同對象。 [注意:出現在默認參數中的字符串文字不在內聯函數的主體中,因為該表達式用於來自該內聯函數的函數調用中。 -end note]在extern內聯函數體內定義的類型在每個翻譯單元中都是相同的類型。

暫無
暫無

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

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