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 の仮想アドレス空間を受け取ります。