0

我刚刚在我的新系统上安装了适用于 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% :-(

4

2 回答 2

1

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

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

于 2008-12-03T19:56:24.363 回答
0

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

于 2008-12-03T19:25:19.200 回答