2013-03-21 67 views
2

我想測量一下我的項目中使用的一些內聯函數的性能和一般行爲(創建多少程序集等)。除了性能分析時間以外,是否可以查看使用這些內聯函數的函數的代碼擴展?是否可以剖析查看程序集的C/C++內聯函數?

我嘗試在Visual C++和MingW(通過NetBeans)在調試過程中查看Disassembly面板。通過調試構建每個內聯函數,在程序集中使用調用,以便它們不被內聯。如果我激活優化,程序集會發生變化,甚至不能在這些函數中放置斷點。你知道任何編譯器設置(在GCC或VC,例如,只是優化內聯函數),書(我有「Efficient C++」,談論內聯測量計時)或其他任何東西來更好地理解這個話題嗎?

回答

0

這裏是VS的編譯器開關link。如果你只是想測試內聯只啓用此優化。

+0

我已經嘗試過了,但它告訴我與/ ZI選項不兼容。什麼樣的調試信息類型更可取? – elvencode 2013-03-21 16:04:27

+1

/ZI用於調試模式。無論如何,您都不想在調試模式下檢查性能。你*有*在發佈模式下這樣做。 – 2013-03-21 17:39:33

+0

我明白了,但是如何查看程序集信息(即調試信息)和發佈版本?我的意思是看到函數和彙編代碼之間的對應關係。 – elvencode 2013-03-21 18:12:39

0

像英特爾VTune這樣的工具可以剖析內聯函數。即使組件中沒有實際的call,它們也會使用二進制文件中的調試信息將指令指針映射回「派生代碼的函數」。

在使用一些工具查看帶註釋的程序集時,您可以看到這種效果 - 幾個函數的源代碼將混合在一起,這反映了內聯。

這個過程並不完美,因爲「這個特定的指令屬於哪個函數」幾乎成爲了某些內聯類型的哲學問題而不是技術問題(的確,指令可能在幾個函數之間被有效地「共享」 )。

相關問題