2012-04-08 87 views

回答

1

Inline工作方式類似於由編譯器控制的複製/粘貼,與預處理器宏完全不同:宏將被強制內聯,將污染所有的名稱空間和代碼,不易調試,即使編譯器認爲它效率低下,也會執行。

通過將其標記爲inline,可以將函數定義放在頭文件中(即,它可以包含在多個編譯單元中,而不需要連接器抱怨)。

標誌的東西inline不給你保證,這將是內聯。這只是編譯器的一個建議。有時候這是不可能的,比如當你有一個虛函數時,或者當涉及到遞歸時。有時編譯器只是選擇不使用它。

+0

你可以舉一些例子,一個宏將被排除在編譯器的低效位置(如第一段所述)。 – 2012-04-08 16:23:39

+0

宏指令「內聯」編譯發生之前,也就是將源被修改爲每宏,然後編譯。 – 2012-04-08 16:29:39

+0

如果您的內聯代碼變得更大,它可能會導致編譯器觸發分頁並擊敗優化。 – IndieProgrammer 2012-04-08 16:35:23

1

內聯函數以適應緩存內存時,你的函數被調用過於頻繁有用和足夠小......如果編譯器處理它,它可以決定如何使用這些參數,但是如果你有在目標硬件上更多的知識,你也可以手動執行。

+0

因此,如果功能沒有使用過frequntly&不是很大手動直列相當於編譯器的內聯? – 2012-04-08 16:19:50

+0

手冊內聯和自動內聯在性能manner..the唯一的區別是相同的編譯器可以爲你做,並檢查所有的適合自己的功能,也可以通過自己,如果你知道自己在做什麼,並告訴編譯器內聯一些關鍵和合適的功能。 – 2012-04-08 16:23:53