我刚刚在我的新系统上安装了适用于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%: - (
答案 0 :(得分:1)
由于代码方面的差异,静态数据等,64位二进制文件将大于32位二进制文件。我们的项目是7.1MB(x86)和10.7MB(x64),这是一个大量的代码。除非你有很多指针大小的静态数据,否则声音几乎会翻倍。
确保使用/ OPT:REF链接以丢弃任何未引用的符号。
答案 1 :(得分:0)
我非常怀疑它是优化器。程序大小的差异可能与调试信息和/或链接的静态库有关。请确保您没有链接到任何不需要的静态库。