我的一個朋友告訴編譯器內嵌比手動內嵌更好,但爲什麼他不能解釋我。如果可以手動使用inline關鍵字(除了一次又一次寫入相同的代碼),有什麼好處?編譯器內聯比內聯手動更好嗎?
回答
Inline
工作方式類似於由編譯器控制的複製/粘貼,與預處理器宏完全不同:宏將被強制內聯,將污染所有的名稱空間和代碼,不易調試,即使編譯器認爲它效率低下,也會執行。
通過將其標記爲inline
,可以將函數定義放在頭文件中(即,它可以包含在多個編譯單元中,而不需要連接器抱怨)。
標誌的東西inline
不給你保證,這將是內聯。這只是編譯器的一個建議。有時候這是不可能的,比如當你有一個虛函數時,或者當涉及到遞歸時。有時編譯器只是選擇不使用它。
內聯函數以適應緩存內存時,你的函數被調用過於頻繁有用和足夠小......如果編譯器處理它,它可以決定如何使用這些參數,但是如果你有在目標硬件上更多的知識,你也可以手動執行。
因此,如果功能沒有使用過frequntly&不是很大手動直列相當於編譯器的內聯? – 2012-04-08 16:19:50
手冊內聯和自動內聯在性能manner..the唯一的區別是相同的編譯器可以爲你做,並檢查所有的適合自己的功能,也可以通過自己,如果你知道自己在做什麼,並告訴編譯器內聯一些關鍵和合適的功能。 – 2012-04-08 16:23:53
- 1. 編譯器內聯函數有多深?
- 2. 靜態模板函數可以通過編譯器內聯嗎?
- 3. gcc內在vs內聯彙編:哪個更好?
- 4. 內聯編輯器tinymce
- 5. 使用內聯樣式不好嗎?
- 6. 編譯錯誤 - 內聯代碼
- 7. 如何編譯內聯HTMLBars模板?
- 8. 聯動的內聯函數
- 9. Jquery內聯編輯
- 10. WPF二傳手值內聯
- 11. 使用HP CC編譯器的PA-RISC內聯彙編
- 12. 爲什麼Delphi編譯器不內聯彙編函數?
- 13. 轉換一個GCC內聯彙編德爾福內聯彙編
- 14. GCC彙編內聯:與只有內聯彙編代碼
- 15. 代碼隱藏比內聯代碼更快嗎?
- 16. Kotlin內聯函數比Java匿名類更便宜嗎?
- 17. VC++自動內聯?
- 18. Jqgrid更改內聯編輯的值
- 19. 鏈接器內聯函數可以嗎?
- 20. 內聯ckeditor需要htmlspecialchars嗎?
- 21. 現在的C++編譯器內聯函數只能調用一次嗎?
- 22. Can/do C編譯器能夠優化內聯函數的地址嗎?
- 23. 編譯器如何管理返回內聯函數?
- 24. Java編譯器是否有效地處理內聯字符串?
- 25. 編譯器如何處理內聯導出函數?
- 26. 內聯lambda表達式導致編譯器錯誤
- 27. 谷歌封閉編譯器 - 不內聯goog lib函數調用?
- 28. 編譯器是否決定何時內聯函數(使用C++)?
- 29. GCC內聯C++函數沒有「內聯」關鍵字嗎?
- 30. 你可以將這個內聯asm轉換爲非內聯嗎?
你可以舉一些例子,一個宏將被排除在編譯器的低效位置(如第一段所述)。 – 2012-04-08 16:23:39
宏指令「內聯」編譯發生之前,也就是將源被修改爲每宏,然後編譯。 – 2012-04-08 16:29:39
如果您的內聯代碼變得更大,它可能會導致編譯器觸發分頁並擊敗優化。 – IndieProgrammer 2012-04-08 16:35:23