【问题标题】:Is there a difference (re optimizations) between MSVC++ 2008 and PSDK compiler?MSVC++ 2008 和 PSDK 编译器之间有区别(重新优化)吗?
【发布时间】:2008-12-03 19:22:41
【问题描述】:

我刚刚在我的新系统上安装了适用于 Windows Server 2008 和 .NET 3.5 的 Platform SDK,并且第一次尝试为 WIN64 编译一个项目。该程序的 Unicode Release 版本是为 32 位构建的(使用不再可用的 Free Toolkit 中的优化编译器),大小约为 2.8 MB。使用来自最新 PSDK 的 amd64 编译器,程序大小超过 5 MB。

我最关心程序的大小,所以一切都是用 /O1 开关构建的。我期待程序在为 64 位构建时会变得更大,但不是那么多。大小更符合 Express 版本的构建,其中(某些)优化不可用。

PSDK 中的编译器和 MSVC 2008 Professional 中的编译器是否创建大小非常不同的程序? PSDK 中的编译器是否以相同的方式优化,甚至根本优化?

感谢您的任何见解。

编辑:

程序和所有链接库都是在命令行上使用相同的 makefile.vc 构建的,因此编译设置不太可能存在差异。我基本上只是使用另一个命令文件来启动具有适当环境的 shell 以进行 64 位编译。

以下是应用程序的尺寸:

VC++ 工具包 2003 32 位 cl.exe:13.10.3052 用于 80x86 2.916.352 平台 SDK 32 位 cl.exe:15.00.30729.01 用于 80x86 2.881.536 平台 SDK 64 位 cl.exe:15.00.21022.08 用于 x64 5.138.432

所以 64 位版本要大 78% :-(

【问题讨论】:

  • 您应该确保环境变量不会影响其他方面。
  • 谢谢你的提示,我明天去看看。还将使用 PSDK 编译器进行 32 位构建,以查看大小差异。
  • 我没有发现环境变量有任何差异。

标签: visual-c++ sdk 64-bit


【解决方案1】:

由于代码方面的差异、静态数据等原因,64 位二进制文​​件将大于 32 位二进制文​​件。我们的项目大小为 7.1MB (x86) 与 10.7MB (x64),这是针对大量的代码。几乎翻倍听起来有点过分,除非你有很多指针大小的静态数据。

确保您使用 /OPT:REF 链接以丢弃任何未引用的符号。

【讨论】:

  • /OPT:REF 根本没有任何区别,它被记录为默认值。恕我直言,尺寸差异似乎非常大,但如果你也有大约 40% 的增长,我想我对此无能为力。不过,我仍然对关于编译器差异的明确答案感兴趣。
  • 我接受这个答案,即使它没有说明编译器是否产生相同的输出。似乎没有人曾经用这两种方法编译过他们的代码。因为我没有 Visual Studio Pro 版本,所以它对我来说仍然是个谜;-)
【解决方案2】:

我非常怀疑它是优化器。程序大小的差异可能与调试信息和/或链接的静态库有关。确保您没有链接到任何不需要的静态库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 2011-08-25
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多