0

我有同样的问题: dll size (debug and release) 但我想进一步调查。调试和发布版本的静态库的Visual C++大小

我的代码只是一个.h 2kb和一个.cpp 14k文件。所生成的调试lib中的185 kb的与取得

/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MTd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\lib_yyy.pch" 

我发布的版本是2275 KB

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Fd"Release\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\lib_yyy.pch" 

所以我试图以优化尺寸,而不是速度,并关闭内嵌扩展期待类似调试版本的东西(O1和OB0而不是O2):

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O1 /Ob0 /sdl /Fd"Release\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\lib_yyy.pch" 

所产生的大小:2275 KB ...等..什么???

如果我在调试版上做了dumpbin头文件,在版本版本中我会得到很多很多行,所有大小都会在一个小的匿名段落中出现。

那么我该如何检查所有这些空间?如何优化速度和尺寸给出相同的尺寸,并且尺寸远远大于未被优化,以及携带额外的调试信息?

回答

1

链接器选项中的“生成映射文件”是调试“为什么这么大”问题的通用方式,但是因为您问的是lib,所以这是行不通的。没有那么多人关心库的大小。我怀疑大多数关心库的大小的人会感到困惑,而且真的应该关心exe的大小。但也许你是个例外。

我不会浪费时间哲学化理论上可能会导致释放模式代码更大的原因。

很可能是您的问题导致了“整个程序优化”和“链接时间代码生成”。 (请参阅命令行中的/ GL)。由于这些,释放模式对象文件基本上是中途完成的,因此它们不会在接近尽可能小的地方烘焙。烘烤发生在链接过程中,这就是大多数人分析代码大小的地方。

最小重建也可能混淆你的分析。

+0

谢谢你的解释。是的,我看到,当我在exe中使用我的大型lib文件时,exe实际上比lib更小 – AbsolutelyFreeWeb

相关问题