MSVC ++ 2008和PSDK编译器之间是否存在差异(重新优化)?

时间:2008-12-03 19:22:41

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

我刚刚在我的新系统上安装了适用于Windows Server 2008和.NET 3.5的Platform SDK,并且第一次尝试为WIN64编译项目。该程序的Unicode发行版本为32位(使用不再提供的免费工具包中的优化编译器)构建,大约2.8 MB。使用最新的PSDK中的amd64编译器,程序超过5 MB。

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

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

感谢您的任何见解。

修改

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

以下是该应用程序的大小:

    VC++ Toolkit 2003   32 bit   cl.exe: 13.10.3052 for 80x86       2.916.352
    Platform SDK        32 bit   cl.exe: 15.00.30729.01 for 80x86   2.881.536
    Platform SDK        64 bit   cl.exe: 15.00.21022.08 for x64     5.138.432

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

2 个答案:

答案 0 :(得分:1)

由于代码方面的差异,静态数据等,64位二进制文​​件将大于32位二进制文​​件。我们的项目是7.1MB(x86)和10.7MB(x64),这是一个大量的代码。除非你有很多指针大小的静态数据,否则声音几乎会翻倍。

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

答案 1 :(得分:0)

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