静态库上的Visual C ++调试版和发布版的大小

时间:2016-07-16 20:24:02

标签: debugging visual-c++ dll static-libraries projects-and-solutions

我有同样的问题: dll size (debug and release) 但是我想进一步调查一下。

我的代码只有一个.h 2kb和一个.cpp 14k文件。生成的调试库是用

制作的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 个答案:

答案 0 :(得分:1)

"生成地图文件"在链接器选项中是通用的调试方式"为什么这么大"问题,但既然你在询问lib,那就不行了。没有那么多人关心lib的大小。我怀疑大多数关注lib大小的人都很困惑,真的应该关注exe的大小。但也许你是一个例外。

我不会浪费时间来理解理论上可能会导致释放模式codegen变大的时间。

最有可能造成问题的是,"整个计划优化"和#34;链接时间代码生成"。 (请参阅命令行中的/ GL。)有了这些,发布模式对象文件基本上都是在中途完成的,所以它们不会在尽可能小的地方被烧掉。在链接期间进行烘焙,这是大多数人分析代码大小的地方。

最小的重建也可能会使你的分析变得混乱。