2011-10-21 18 views

回答

4

取決於你的代碼是什麼樣的。

但是不理解你的代碼是什麼意思?那是肯定會導致你的問題。

爲什麼你不試圖去了解什麼inline實際上確實,而不僅僅是它是否會導致任何問題?

C++中inline關鍵字的主要作用是使編譯器抑制ODR(一個定義規則)。所以一個非inline函數必須完全定義爲一個翻譯單元。

一個inline功能必須在每個使用它的翻譯中定義。

因此,根據您的功能定義的方式和位置,inline可能是或不可能是正確。我建議你在使用正確的地方使用它。

-1

假設編譯器不夠聰明以至於忽略它,它可能會使編譯輸出變大並運行得更慢。一般來說,如果你有一個特定的目的,你應該只使用像'register'或'inline'這樣的優化關鍵字 - 一種你知道編譯器不知道的有用東西的情況。

在現代CPU上,內聯通常是一種悲觀而非優化。這是因爲函數的每個副本都必須從內存中獲取,解碼其指令,並在各種高速緩存中佔用自己的空間 - 特別是分支預測高速緩存。

+0

-1,內聯函數使分支預測和緩存效率更高,因爲函數位於調用的地方,而不是代碼段中的其他地方。跳躍的地方是導致緩存未命中的原因。 – pezcode

+0

@pezcode:咦?如何跳轉產生緩存未命中?跳躍是100%可預測的。如果這個函數最近被其他地方調用,它在緩存中將會很熱。 –

相關問題