2012-11-03 160 views
4

好解釋我的問題,最好的辦法就是槽2個例子:Visual Studio是否仍然可以優化預編譯的代碼?

例1:

你已經做了自己的框架或某種被稱爲在MyLibrary的引擎,你已經建立是一個.lib帶有最大優化選項。現在包含標題並將.lib鏈接到一個名爲MyImplementation的新項目中。該項目使用了MyLibrary的大部分功能,當您完成時,將生成項目(再次以最大優化)。

例2:

同樣,你有相同的庫,但不是構建它,你把它開源。然後你做同樣的MyProject的,包括你的頭和你建立啓用最大優化的MyProject。

是的話,例2運行速度更快,因爲編譯器可以訪問完整的源代碼(框架/引擎+你使用它的項目)?

+1

我的猜測是這是不太可能的。據我所知,傳統上優化是在單個編譯單元上完成的(單個庫通常由許多這樣的編譯單元組成),並且根本不考慮在整個「項目」中使用代碼。也可以在鏈接時進行一些優化,但這些顯然會將所有代碼都鏈接到可執行文件中,而不管您的項目是什麼。 (也就是說,我不是一個編譯器專家,所以請帶上一粒沙子。) – millimoose

+0

過程間優化應該考慮到多個編譯單元,不是嗎? – user1779802

回答

2

靜態庫是預編譯的,這意味着任何進一步的優化都依賴於鏈接器。現在鏈接器可以獲得很大的性能提升,但通常最好的結果來自配置文件指導優化,它需要特殊的編譯器設置來引導配置文件。開源項目總是最好的(除非你正在保護知識產權),因爲開發人員可以爲他們的平臺和編譯器編譯項目,更不用說沒有源代碼調試實際上是不可能的。

相關問題