3 回答

TA貢獻1807條經驗 獲得超9個贊
通過與/ MD動態鏈接,
您接觸到系統更新(無論是好是壞),
您的可執行文件可以更?。ㄒ驗樗鼪]有嵌入庫),并且
我認為,至少DLL的代碼段在所有正在使用它的進程之間共享(減少了所消耗的RAM總量)。
我還發現,在實踐中,當使用通過不同的運行時選項構建的靜態鏈接的僅第三方的二進制二進制庫時,主應用程序中的/ MT往往比/ MD引起沖突的頻率更高(因為如果C運行時多次被靜態鏈接,尤其是當它們是不同的版本時,將會遇到麻煩。

TA貢獻1906條經驗 獲得超10個贊
如果使用的是DLL,則應使用動態鏈接的CRT(/ MD)。
如果為.exe和所有.dll使用動態CRT,則它們將共享一個CRT的單一實現-這意味著它們將共享一個CRT堆,并且可以在一個.exe / .dll中釋放分配的內存另一個。
如果您為.exe和所有.dll使用靜態CRT,則它們都將獲得CRT的單獨副本-這意味著它們都將使用自己的CRT堆,因此必須在與之相同的模塊中釋放內存已分配。您還將遭受代碼膨脹(CRT的多個副本)和額外的運行時開銷(每個堆從OS分配內存以跟蹤其狀態的開銷,開銷是顯而易見的)。

TA貢獻1884條經驗 獲得超4個贊
我相信通過Visual Studio構建的項目的默認值為/ MD。
如果使用/ MT,則可執行文件將不依賴于目標系統上存在的DLL。如果將其包裝在安裝程序中,則可能不會有問題,您可以選擇其中一種。
我自己使用/ MT,因此可以忽略整個DLL混亂。
PS正如Fooz先生所指出的,保持一致至關重要。如果要鏈接其他庫,則需要使用與它們相同的選項。如果您使用的是第三方DLL,那么幾乎可以肯定,您將需要使用運行時庫的DLL版本。
- 3 回答
- 0 關注
- 884 瀏覽
添加回答
舉報