0

新しいシステムに Windows Server 2008 および .NET 3.5 用のプラットフォーム SDK をインストールしたばかりで、初めて WIN64 用のプロジェクトをコンパイルしようとしました。そのプログラムの Unicode リリース バージョンは、32 ビット用にビルドされており (使用できなくなった Free Toolkit の最適化コンパイラを使用)、約 2.8 MB で提供されます。最新の PSDK の amd64 コンパイラを使用すると、プログラムのサイズは 5 MB を超えます。

私はプログラムのサイズに最も関心があるので、すべて /O1 スイッチを使用して構築されています。64 ビット用にビルドするとプログラムが大きくなると予想していましたが、それほど大きくはありませんでした。サイズは、(一部の) 最適化が利用できない Express バージョンのビルドとより一致しています。

PSDK のコンパイラと MSVC 2008 Professional のコンパイラは、非常に異なるサイズのプログラムを作成しますか? PSDK のコンパイラは同じように最適化しますか、それともまったく最適化しませんか?

洞察をありがとう。

編集:

プログラムとすべてのリンクされたライブラリは、コマンド ラインで同じ makefile.vc を使用してビルドされるため、コンパイル設定の違いはほとんどありません。基本的に、別のコマンド ファイルを使用して、64 ビット コンパイルに適した環境でシェルを起動しました。

アプリケーションのサイズは次のとおりです。

    VC++ Toolkit 2003 32 ビット cl.exe: 80x86 の場合は 13.10.3052 2.916.352
    プラットフォーム SDK 32 ビット cl.exe: 80x86 の場合は 15.00.30729.01 2.881.536
    プラットフォーム SDK 64 ビット cl.exe: x64 の場合は 15.00.21022.08 5.138.432

したがって、64 ビット版は 78% 大きくなります :-(

4

2 に答える 2

1

64 ビット バイナリは、コード側の違いや静的データなどにより、32 ビット バイナリよりも大きくなります。コード。ポインターサイズの静的データが大量にない限り、ほぼ倍増するのは過剰に聞こえます。

/OPT:REF とリンクして、参照されていないシンボルを破棄していることを確認してください。

于 2008-12-03T19:56:24.363 に答える
0

私はそれがオプティマイザであることを非常に疑っています。プログラム サイズの違いは、おそらくデバッグ情報やリンクされている静的ライブラリに関係しています。必要のない静的ライブラリに対してリンクしていないことを確認してください。

于 2008-12-03T19:25:19.200 に答える