次の方法で共有


WOW64 でのパフォーマンスとメモリ消費量

WOW64 でのパフォーマンスとメモリ使用量は、次の要因によって決まります。

  • プロセッサ ハードウェア。 命令エミュレーションはチップ上で実行されます。 x64 プロセッサでは、x86 命令はプロセッサによってネイティブに実行されます。 したがって、x64 の WOW64 での実行速度は、32 ビット Windows での速度に似ています。 Intel Itanium プロセッサと ARM64 プロセッサでは、エミュレーションにより多くのソフトウェアが関与し、結果としてパフォーマンスが低下します。
  • API サンクのオーバーヘッド。 このオーバーヘッドは、NT カーネルへのシステム呼び出しに比べて小さくなります。 NT カーネル関数は、あまり呼び出すことを意図しません。
  • 仮想メモリ サイズ。 Intel Itanium プロセッサでは、同じ 32 ビット アプリケーションの 2 つ以上のインスタンスが同時に実行されている場合、WOW64 によって大幅なオーバーヘッドが発生します。 これは、Intel Itanium のネイティブ 8 KB ページが原因で、x86 アーキテクチャのネイティブ 4 KB ページのエミュレーションが複雑になります (より多くのページが書き込み可能としてマークされ、すべての書き込み可能なページはプロセスにプライベートです)。 これは、特定のプロセッサでのターミナル サービスのスケーラビリティに悪影響を及ぼす可能性があります。 これは x64 プロセッサの場合ではありません。
  • ワーキング セット。 WOW64 は、アプリケーションのワーキング セットのサイズを増やします。

WOW64 を使用すると、32 ビット アプリケーションで 64 ビット カーネルを利用できます。 そのため、32 ビット アプリケーションでは、より多くのカーネル ハンドルとウィンドウ ハンドルを使用できます。 ただし、WOW64 では各スレッドに追加の 64 ビット スタック (通常は 512 KB) が割り当てられるため、32 ビット アプリケーションは、x86 ベースのシステムでネイティブに実行する場合に、WOW64 の下にできるだけ多くのスレッドを作成できない場合があります。 さらに、一部のアドレス空間は WOW64 自体と使用するデータ構造用に予約されています。 予約される量はプロセッサによって異なります。は、x64 または ARM64 プロセッサよりも Intel Itanium で予約されています。

アプリケーションでイメージ ヘッダーに IMAGE_FILE_LARGE_ADDRESS_AWARE フラグが設定されている場合、各 32 ビット アプリケーションは WOW64 環境で 4 GB の仮想アドレス空間を受け取ります。 IMAGE_FILE_LARGE_ADDRESS_AWARE フラグが設定されていない場合、各 32 ビット アプリケーションは WOW64 環境で 2 GB の仮想アドレス空間を受け取ります。