代码之家  ›  专栏  ›  技术社区  ›  mghie

MSVC++2008和PSDK编译器之间有区别(重新优化)吗?

  •  0
  • mghie  · 技术社区  · 16 年前

    我刚刚安装了Windows Server 2008和的平台SDK。NET 3.5,并首次尝试为WIN64编译项目。该程序的Unicode Release版本为32位构建(使用不再可用的Free Toolkit中的优化编译器),大小约为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 回复  |  直到 16 年前
        1
  •  1
  •   Rob Walker    16 年前

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

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

        2
  •  0
  •   Adam Rosenfield    16 年前

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

    推荐文章