1. ホーム
  2. c++

[解決済み] MDと/MTのどちらでコンパイルすべきですか?

2022-05-15 11:27:21

質問

Visual Studio には、コンパイルフラグ /MD と /MT があり、どの種類の C ランタイムライブラリが必要かを選択することができます。

実装の違いは理解していますが、どちらを使うべきかまだ迷っています。長所と短所は何ですか?

私が聞いた /MD の利点の 1 つは、誰かがランタイムを更新することができ (セキュリティ問題のパッチなど)、私のアプリはこの更新から恩恵を受けることができるということです。しかし、私にとっては、これはほとんど非機能のように思えます。新しいバージョンに対するテストを許可せずにランタイムを変更されるのは困ります!

私が好奇心を抱いているいくつかのこと。

  • これはビルド時間にどのように影響しますか。(おそらく /MT は少し遅くなるのでは?)
  • 他の影響は何ですか?
  • 多くの人が使っているのはどちらですか?

どのように解決するのですか?

MDと動的にリンクさせることで、解決します。

  • は、システムの更新に (善かれ悪しかれ) さらされています。
  • 実行ファイルをより小さくできる (ライブラリが組み込まれていないため)、そして
  • 少なくとも DLL のコード セグメントは、それをアクティブに使用しているすべてのプロセス間で共有されると思います (消費される RAM の総量が減ります)。

また、実際には、異なるランタイム オプションでビルドされた、静的にリンクされたサード パーティのバイナリのみのライブラリを扱う場合、メイン アプリケーションの /MT は /MD よりはるかに頻繁に競合を引き起こす傾向があることがわかりました (C ランタイムが複数回静的にリンクされると、特にそれらが異なるバージョンの場合、問題に遭遇するためです)。