20

今日、私が取り組んでいるコンパイル済みの静的ライブラリは、デバッグよりもリリースモードの方がはるかに大きいことがわかりました。ほとんどの場合、正反対のことが起こるので、私はそれが非常に驚くべきことに気づきました(私が知る限り)。

デバッグモードでのサイズは3MBをわずかに超えています(かなり大きなプロジェクトです)が、リリースでは最大6.5MBになります。誰かがこれの理由を教えてもらえますか?静的ライブラリプロジェクトに通常のVisualStudio(2008)設定を使用していますが、ビルド構成設定はほとんど変更されていません。リリースでは、/ O2を使用しており、「Favorsizeorspeed」は「Noth」に設定されています。/ O2( "Maximize speed")により、最終的な.libが、すべてのデバッグ情報を含むデバッグバージョンよりもはるかに大きくなる可能性がありますか?

編集: 追加情報:
デバッグ:
-プログラム全体の最適化:いいえ
-機能レベルのリンクを有効にします:いいえ

リリース:
-プログラム全体の最適化:リンク時のコード生成
を有効にします-機能レベルのリンクを有効にします:はい

4

3 に答える 3

33

違いは、特にリンク時のコード生成によるものです。コンパイラでのリンク時コード生成-MSDNのコンパイラ最適化についてすべてのプログラマが知っておくべきこと-基本的に、LTCGをオンにすると、リンカがそれを使用できるように、コンパイラが静的ライブラリにパックされるはるかに多くのデータを生成するという章を読んでください。実行可能ファイルを実際にリンクしながら、より良いマシンコードを生成するための追加データ。

デバッグ構成でLTCGをオフにしているため、生成されるライブラリは、余分なデータがないため、著しく小さくなります。

PS: 元のリンク(2015年11月9日には機能しません)

于 2010-06-24T06:08:58.217 に答える
1

ここでは最適化が問題になる可能性があります。特に、自動的に作成されたinline関数は大きくなりますが、デバッグよりもリリースの方が高速です。

于 2010-06-23T12:28:44.513 に答える
0

個人的には、リリース PDB がデバッグ PDB よりも大きいのを見たことがありません。LIBについても同じです。

于 2010-06-23T12:21:29.030 に答える