仮想アドレス空間 (64 ビット Windows のプログラミング ガイド)

既定では、64 ビットの Microsoft Windows ベースのアプリケーションには、数テラバイトのユーザー モード アドレス空間があります。 正確な値については、「 Windows および Windows Server リリースのメモリ制限」を参照してください。 ただし、アプリケーションでは、システムがアプリケーションのすべてのメモリを 2 ギガバイト未満に割り当てる必要があることを指定できます。 この機能は、次の条件に該当する場合に、64 ビット アプリケーションに役立ちます。

  • 2 GB のアドレス空間で十分です。
  • このコードには、ポインターの切り捨てに関する警告が多数あります。
  • ポインターと整数は自由に混在します。
  • このコードには、32 ビットデータ型を使用するポリモーフィズムがあります。

すべてのポインターは引き続き 64 ビット ポインターですが、システムは、すべてのメモリ割り当てが 2 GB の制限を下回るようにします。これにより、アプリケーションがポインターを切り捨てた場合、重要なデータは失われません。 ポインターは 32 ビット値に切り捨て、符号拡張またはゼロ拡張によって 64 ビット値に拡張できます。

このメモリ制限を指定するには、 /LARGEADDRESSAWARE:NO リンカー オプションを使用します。 ARM64 バイナリの 場合、/LARGEADDRESSAWARE:NO は無視されることに注意してください。 ただし、このオプションを使用すると問題が発生する可能性があることに注意してください。 このオプションを使用する DLL をビルドし、このオプションを使用しないアプリケーションによって DLL が呼び出された場合、DLL は上位 32 ビットが重要な 64 ビット ポインターを切り捨てる可能性があります。 これにより、警告なしでアプリケーションエラーが発生する可能性があります。