ベンの答えに追加:
ランタイムには、Visual Studio の各バージョンの多くの機能がバンドルされています。ランタイムの DLL バージョンを使用する主な利点は、システムが問題の DLL を更新するたびに (セキュリティ) 更新を「無料で」入手できることです。
一部の人々が指摘するもう 1 つの利点は、多くのプロセスが DLL 経由でランタイムを使用する場合、DLL バージョンを使用するためのリソースを節約できることです。これは、Windows には、メモリ内の DLL をプロセス間 (またはプロセスの大部分) で共有するメカニズムがあるためです。
ランタイムをバイナリにバンドルする (静的リンクとも呼ばれる) と、バイナリが大きくなることに気付くでしょう。これは、各バイナリが独自のバージョンのランタイムを保持するためです (プログラムを新たにリンクしないと置き換えられません)。
また、ランタイムの異なるバージョン (つまり、デバッグとリリース) に静的にリンクする (つまり、デバッグとリリース) DLL や、DLL に応じてランタイムに動的かつ静的にリンクする (独自の) DLL を混在させることにも注意してください。ここでの問題はアロケーターです。メモリを割り当てる関数 ( malloc
、calloc
、new
) とメモリを解放する関数は、これらの間で互換性がありません。このような場合の最善の方法は、 - などの独立したメカニズムを使用するIMalloc
か、オブジェクト インスタンス内に常にデアロケータを保持し、インスタンスが別のモジュールで処理されている場合でも、 free
/への呼び出しがdelete
モジュールの境界を越えないようにすることです。