簡體   English   中英

調試與發布DLL大小

[英]debug vs. release dll size

為什么在cpp中調試模式下的dll比發布時的X10大,而在.Net中它們幾乎是相同的大小?

要調試C ++程序,必須在DLL中保留大量額外信息,以便調試器可以在運行時查找代碼。 與C#不同,C ++沒有能夠檢查代碼的運行時要求,它允許廣泛的運行時檢查,也稱為反射。 無論是使用調試還是發布模式,C#中都有此信息。

另外,C ++通常在發布模式下直接編譯為機器代碼,編譯器的目標是盡可能地優化代碼,例如。 刪除任何和所有無關的信息和代碼。 在C#中,編譯器編譯為偽代碼,該代碼及時按需編譯。 無論是正在構建的版本還是調試,此代碼都會保留調試所需的大部分內容。 這樣就可以編寫一個反編譯器來從運行時程序集中返回代碼。

也許是因為在.Net中,它是處理所有調試檢查的運行時引擎,而在CPP中,所有檢查都被編譯到DLL中。

.Net DLL包含支持運行時反射,類型安全和代碼訪問安全性的元數據。 PDB中唯一的東西是局部變量名和行號。

在C ++中,需要注入額外的元數據,有時需要注入no-op來支持調試。

你的意思是C#而不是.NET。 這也取決於你的項目。

我有一個C ++ / CLI DLL,發布時為54K,調試時為94K,
另一個在發布時為88KB,在調試時為124KB。

包含MFC的我的C ++ / CLI EXE在發布時為471KB,在調試時為4446KB!

然后我的C#DLL在調試和發布中都是135KB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM