调试与发布DLL大小

时间:2009-10-28 10:10:16

标签: .net c++ dll debugging release

为什么在cpp中调试模式下的dll比发布时的X10大,而在.Net中它们的大小几乎相同?

4 个答案:

答案 0 :(得分:3)

要调试C ++程序,必须在DLL中保留许多额外信息,以便调试器可以在运行时查找代码。与C#不同,C ++没有能够检查代码的运行时要求,它允许广泛的运行时检查,也称为反射。无论是使用调试模式还是发布模式,这些信息都存在于C#中。

此外,C ++通常在发布模式下直接编译为机器代码,编译器的目标是尽可能地优化代码,例如。删除任何和所有无关的信息和代码。在C#中,编译器编译为伪代码,该代码及时按需编译。无论是正在构建的版本还是调试,此代码都会保留调试所需的大部分内容。这么多,以便可以编写一个反编译器,从运行时程序集中返回代码。

答案 1 :(得分:1)

也许是因为在.Net中,它是处理所有调试检查的运行时引擎,而在CPP中,所有检查都被编译到DLL中。

答案 2 :(得分:1)

.Net DLL包含支持运行时反射,类型安全和代码访问安全性的元数据。 PDB中唯一的东西是局部变量名和行号。

在C ++中,需要注入额外的元数据,有时需要注入no-op来支持调试。

答案 3 :(得分:0)

你的意思是C#而不是.NET。这也取决于你的项目。

我有一个C ++ / CLI DLL,发行时为54K,调试时为94K 另一个在发布时为88KB,在调试中为124KB。

包含MFC的My C ++ / CLI EXE发布时为471KB,调试时为4446KB!

然后我的C#DLL在调试和发布时都是135KB。