【问题标题】:Visual C++ size of debug and release version on a static library静态库上调试和发布版本的 Visual C++ 大小
【发布时间】:2016-07-16 20:24:02
【问题描述】:

我有同样的问题: 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 标头,我会得到很多行,在发布版本中,所有大小都会出现在一个小的匿名段落中。

那么我如何检查占用所有这些空间的内容?对速度和大小进行优化会产生相同的大小,并且该大小比根本不优化并携带额外的调试信息要大得多,这有什么意义?

【问题讨论】:

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


    【解决方案1】:

    链接器选项中的“生成映射文件”是调试“为什么这么大”问题的通用方法,但是由于您询问的是一个库,所以它不起作用。没有多少人关心库的大小。我怀疑大多数关心 lib 大小的人都感到困惑,真的应该关心 exe 的大小。但也许你是个例外。

    我不会浪费时间思考理论上什么可能导致发布模式代码生成更大。

    最有可能导致您的问题是“整个程序优化”和“链接时间代码生成”。 (参见命令行中的 /GL。)有了这些,发布模式目标文件基本上是半完成的,所以它们不会被烤到尽可能小的地方。在链接过程中发生烘烤,这是大多数人分析代码大小的地方。

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

    【讨论】:

    • 感谢您的解释。是的,我看到当我在 exe 中使用我的大型 lib 文件时,exe 实际上比 lib 小得多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2018-11-13
    • 2013-03-25
    相关资源
    最近更新 更多