/Gy オプションを指定した Microsoft C++ は、リンカーが未使用の関数を省略できるように、すべての関数を別のセクションに配置します。これにより、実行可能ファイルのサイズが小さくなる場合があります。
すべての関数を異なるセクションに配置するだけでなく、各セクション COMDAT を選択 IMAGE_COMDAT_SELECT_NODUPLICATES でマークします。COMDAT の目的は、何かを複数の場所で定義できるようにすることです (リンカーは 1 つの定義を選択し、他の定義を破棄します) が、Selection 値は複数の定義を許可していません。
IMAGE_COMDAT_SELECT_NODUPLICATES の目的は何ですか? または、/Gy を指定した Microsoft C++ がコード セクションを COMDAT とマークするのはなぜですか?