亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我應該用/ MD或/ MT編譯嗎?

我應該用/ MD或/ MT編譯嗎?

C++
青春有我 2019-11-22 16:10:04
在Visual Studio中,有編譯標志/ MD和/ MT,可讓您選擇所需的C運行時庫。我了解實現上的區別,但仍不確定要使用哪個。優點/缺點是什么?我聽說過/ MD的一個優點是,它允許某人更新運行時(例如修補安全問題),并且我的應用程序將從此更新中受益。盡管對我而言,這似乎是一個非功能:我不希望人們在不讓我針對新版本進行測試的情況下更改運行時!我有些好奇的事情:這將如何影響構建時間?(大概/ MT慢一點?)還有哪些其他含義?大多數人使用哪一個?
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

通過與/ MD動態鏈接,

  • 您接觸到系統更新(無論是好是壞),

  • 您的可執行文件可以更?。ㄒ驗樗鼪]有嵌入庫),并且

  • 我認為,至少DLL的代碼段在所有正在使用它的進程之間共享(減少了所消耗的RAM總量)。

我還發現,在實踐中,當使用通過不同的運行時選項構建的靜態鏈接的僅第三方的二進制二進制庫時,主應用程序中的/ MT往往比/ MD引起沖突的頻率更高(因為如果C運行時多次被靜態鏈接,尤其是當它們是不同的版本時,將會遇到麻煩。


查看完整回答
反對 回復 2019-11-22
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

如果使用的是DLL,則應使用動態鏈接的CRT(/ MD)。

如果為.exe和所有.dll使用動態CRT,則它們將共享一個CRT的單一實現-這意味著它們將共享一個CRT堆,并且可以在一個.exe / .dll中釋放分配的內存另一個。

如果您為.exe和所有.dll使用靜態CRT,則它們都將獲得CRT的單獨副本-這意味著它們都將使用自己的CRT堆,因此必須在與之相同的模塊中釋放內存已分配。您還將遭受代碼膨脹(CRT的多個副本)和額外的運行時開銷(每個堆從OS分配內存以跟蹤其狀態的開銷,開銷是顯而易見的)。


查看完整回答
反對 回復 2019-11-22
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

我相信通過Visual Studio構建的項目的默認值為/ MD。


如果使用/ MT,則可執行文件將不依賴于目標系統上存在的DLL。如果將其包裝在安裝程序中,則可能不會有問題,您可以選擇其中一種。


我自己使用/ MT,因此可以忽略整個DLL混亂。


PS正如Fooz先生所指出的,保持一致至關重要。如果要鏈接其他庫,則需要使用與它們相同的選項。如果您使用的是第三方DLL,那么幾乎可以肯定,您將需要使用運行時庫的DLL版本。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 884 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號