我知道編譯器可能執行或不執行函數的內聯擴展,無論程序員是否請求。
我只是好奇地想知道,有沒有什麼方法可以讓程序員知道編譯器已經內聯了一個特定的函數?內聯函數
Q
內聯函數
5
A
回答
10
除了通過查看生成的代碼,沒有。有些實現可能會提供這些信息,但這不是標準所要求的。
之類的東西inline
或register
(顫慄)是建議編譯器,它是免費接受他們,不理會他們,甚至對你撒謊,它的完成它,而你背後偷偷去和沒有這樣做:-)
我傾向於不使用這樣的功能,因爲我懷疑編譯器通常比我知道如何從我的代碼中獲得最高性能。
0
閱讀目標文件的反彙編。
1
設置您的編譯器以生成彙編代碼並在那裏檢查。
+0
如果你有不同的debug v release版本標誌,請確保使用後者。我已經看到一些編譯器從不內聯,除非您至少啓用了一些優化。 – 2010-03-05 05:57:39
2
您可以分析您的代碼,並查看感興趣的功能是否顯示在調用堆棧中。儘管如此,我想不能保證您的堆棧採樣率是否不夠高。
但它可能證明它內聯:如果你知道A
電話B
,這就要求C
和A
永遠不會調用C
直接,如果你看到A
調用堆棧上調用C
,你知道B
是內聯該調用。
0
除了查看輸出彙編程序之外,沒有辦法知道。
這些日子的編譯器是'聰明的',他們決定內聯什麼函數以及在什麼情況下。
就像register關鍵字一樣,編譯器這幾天都在挑選,而且真的忽略了你的請求。
0
我不認爲有一種方法來找出你想要什麼,
但是你可以增加功能的possibilites被內聯函數,
使得函數的定義可見到它被調用的翻譯單元。即你總是必須將頭文件中的內聯函數的定義。
相關問題
- 1. 內聯函數
- 2. 內聯函數
- 3. 聯動的內聯函數
- 4. C++內聯函數
- 5. SQL內聯函數
- 6. 內聯函數調用靜態內聯函數
- 7. 內聯函數在其他內聯函數用C
- 8. C++內聯函數原型
- 9. 內聯表值函數
- 10. C,內聯函數和GCC
- 11. 遞歸內聯函數
- 12. Go中的內聯函數
- 13. 內聯函數鏈接
- 14. c中的內聯函數
- 15. 什麼是內聯函數?
- 16. C++函數指針內聯
- 17. 內聯函數定義
- 18. C:指針內聯函數
- 19. C++中的內聯函數
- 20. jQuery - 調用內聯函數
- 21. 碼量的內聯函數
- 22. C++中的內聯函數
- 23. 推薦gcc內聯函數
- 24. 內聯函數/方法
- 25. Postgresql和內聯函數
- 26. 從內聯函數內更新變量
- 27. 如何根據Matlab中的另一個內聯函數定義內聯函數?
- 28. 內嵌另一個內聯函數中的函數C
- 29. 內聯asm:推函數參數
- 30. GCC內聯C++函數沒有「內聯」關鍵字嗎?
更合適的問題,有沒有什麼方法可以讓程序員確信編譯器已經內聯了一個特定的函數* call *? – Potatoswatter 2010-03-05 04:45:19