爲什麼在調試模式下的cpp dll比在.Net中釋放的X10大,它們的尺寸幾乎相同?調試與釋放dll大小
3
A
回答
3
要調試一個C++程序,必須在DLL中保存很多額外的信息,這樣調試器才能在運行時找到代碼。與C#不同,C++沒有運行時間要求,無法檢查代碼,因爲它允許進行廣泛的運行時檢查,也稱爲反射。無論是使用調試模式還是釋放模式,C#中都有這些信息。
此外C++通常直接編譯到機器代碼在發佈模式編譯器的目標是儘可能優化代碼,例如。刪除任何和所有無關的信息和代碼。在C#中,編譯器編譯爲一個僞代碼,該代碼正好按照需要進行編譯。此代碼保留了大部分調試所需的內容,而不管它是否是正在構建的發行版或調試版。這樣可以編寫一個反編譯器,從運行時程序集返回代碼。
1
也許是因爲在.Net中,它是處理所有調試檢查的運行時引擎,而在CPP中,所有檢查都被編譯到DLL中。
1
.Net DLL包含支持運行時反射,類型安全和代碼訪問安全性的元數據。 PDB中唯一的東西是局部變量名稱和行號。
因爲在C++中需要注入額外的元數據並且有時不需要注入以支持調試。
0
你的意思是C#不是.NET。也取決於你的項目。
我有一個C++/CLI DLL,它是54K的版本和94K的調試版本,
,另一個版本是88KB,調試版本是124KB。
包含MFC的C++/CLI EXE在發佈時爲471KB,在調試時爲4446KB!
然後我的C#DLL在調試和發佈中都是135KB。
相關問題
- 1. 確定是否在調試或釋放與python內建dll
- 2. 爲什麼調試模式文件大小比釋放模式大?
- 3. extern「C」DLL:調試是可以的,釋放拋出錯誤C2059
- 4. 自動釋放池調試
- 5. css調整大小 - 與瀏覽器大小,放大和屏幕大小
- 6. 釋放內存在圖像調整大小腳本(GD)
- 7. 與調整大小
- 8. 自動釋放與釋放
- 9. NSImageView調整大小與圖像大小
- 10. 跨DLL調試
- 11. 從調試DLL
- 12. C++ DLL調試
- 13. 調試器自殺以釋放殭屍
- 14. 設置調試或釋放| React Native - iOS
- 15. 停止調試時釋放資源
- 16. 如何釋放模式調試
- 17. Objective C保留/釋放調試
- 18. AdaGide:調試模式和釋放模式
- 19. 調試過度釋放的對象,與NSZombie問題
- 20. 調試模式與釋放模式 - IsJITOptimizerDisabled屬性
- 21. 調試與釋放(我自己的)密鑰存儲區
- 22. WP調試問題與圖像調整大小腳本(WordPress)
- 23. 調整大小與ObjectHandles
- 24. LwjglCanvas與JFrame調整大小
- 25. 釋放calloc'd內存時出現錯誤:釋放無效下一個大小(快)
- 26. 小巧類與dll?
- 27. 調試InProc COM DLL
- 28. 如何調試.dll?
- 29. 無法調試dll
- 30. DLL調試信息