MSVC++ 2008和PSDK编译器有区别(重新优化)吗?
问题描述:
我刚在我的新系统上安装了用于Windows Server 2008和.NET 3.5的Platform SDK,并且第一次尝试编译WIN64的项目。该程序的Unicode发布版本为32位(使用不再可用的免费工具包中的优化编译器)而构建,大约2.8 MB。使用来自最新PSDK的amd64编译器,该程序大于5 MB。MSVC++ 2008和PSDK编译器有区别(重新优化)吗?
我最关心的程序大小,所以一切都建立在/ 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位版本:-(
答
一个64位二进制将比32位二进制大,由于代码方面的差异,静态数据等我们的项目进来在7.1MB(x86)与10.7MB(x64)之间,这是相当数量的代码。除非你有很多指针大小的静态数据,否则几乎会使声音加倍过度。
确保您使用/ OPT:REF链接来放弃任何未引用的符号。
答
大78%,我很怀疑它的优化程序尺寸的差异可能有。以调试信息和/或静态库被链接英寸确保你不链接到任何静态库,你不需要。
您应该确保环境变量不会影响其他方面。 – leppie 2008-12-03 19:35:38
谢谢你的提示,明天我会看看。还将使用PSDK编译器进行32位构建,以查看其中的尺寸差异。 – mghie 2008-12-03 19:55:34