2012-10-09 20 views
2

我目前使用簡單的應用程序進行一些速度測量,在此過程中,我注意到當我告訴鏈接器使用/ DYNAMICBASE時,運行時間縮短了大約1.5%。爲什麼使用鏈接器選項/ DYNAMICBASE加速我的應用程序?

我同意在測量過程中1.5%可能很容易出錯,但我實際上做了超過15次/ DYNAMICBASE和15次/ DYNAMICBASE:NO,每次運行大約5分鐘。即使最快的/ DYNAMICBASE:NO運行速度也比最慢/ DYNAMICBASE運行速度更快......

回答

0

如果您的解決方案直接或間接使用許多DLL -/DYNAMICBASE可以減輕Windows加載程序的負擔,特別是在應用到依賴的DLL。當使用的二進制文件被加載並放置在進程地址空間中時,如果它們的默認基址地址範圍發生衝突 - windows加載程序必須rebase它們,即決定一個新的基址並遍歷DLL全局符號調用(數據或函數)和將它們更改爲新地址。對於許多或非常大的DLL,啓動時間可能不可忽略。

如果從調試器中運行,您可以在「模塊窗口中查看加載的二進制文件,並檢查左側的圖標來確定模塊是否後行基礎重建:

Modules window

如果你看到許多DLL避免使用/ DYNAMICBASE重新綁定,這是可能的原因。你可以(並且原則上應該)用/ BASE直接控制基地址,而不會給這個好處帶來機會。

相關問題