デバッグモードバージョンよりもはるかに大きい静的ライブラリのリリース
-
29-09-2019 - |
質問
今日、私が取り組んでいるコンパイルされた静的ライブラリがはるかに大きいことがわかりました リリース inよりもモード デバッグ. 。ほとんどの場合、正反対が起こるので、私はそれが非常に驚くべきことになりました(私が知る限り)。
デバッグモードのサイズは3 MBをわずかに超えています(かなり大きなプロジェクトです)が、リリースでは6,5 MBになります。誰かが私にこれの理由が何であるかを教えてもらえますか?静的ライブラリプロジェクトに通常のVisual Studio(2008)設定を使用していますが、ビルド構成設定ではほとんど変更されていません。リリースでは、 /O2を使用しており、「好意的なサイズまたは速度」は「どちらでもない」に設定されています。 /o2( "Maximize Speed")により、ファイナル.LIBは、すべてのデバッグ情報を使用してデバッグバージョンよりもはるかに大きくなる可能性がありますか?
編集:追加情報:
デバッグ:
- プログラム全体の最適化:いいえ
- 機能レベルのリンクを有効にします:いいえ
リリース:
- プログラム全体の最適化:リンク時間コード生成を有効にします
- 機能レベルのリンクを有効にします:はい
解決
違いは、特にリンク時間コードの生成によるものです。章のリンク時間コード生成を読んでください コンパイラ - すべてのプログラマーがコンパイラの最適化について知っておくべきこと MSDNで - 基本的に、LTCGをオンにすると、コンパイラが静的ライブラリに詰め込まれたはるかに多くのデータを生成するため、リンカーは実際に実行可能ファイルをリンクしながらより良いマシンコードを生成するためにその追加データを使用できるようにします。
デバッグ構成でLTCGをオフにしているため、生成されたライブラリは、その追加データがないため、著しく小さくなります。
他のヒント
最適化はここでの問題であり、特に自動的に作成される可能性があります inline
関数は、デバッグよりも大きくなりますが、リリースは速くなります。
個人的には、リリースPDBがデバッグPDBよりも大きいのを見たことがありません。 Libsと同じ取引。