WOW64 で動作しているかを調べる
Win32 アプリケーションが WOW64 で動作しているのかどうかを判定するには以下のユニットを利用します。
|
WOW64 上で動作していれば IsWOW64() は True を返します。
|
WOW64 で動作している Win32 アプリケーションに 2GB を超える仮想メモリを割り当てる
32bit アプリケーションの PE ヘッダフラグに IMAGE_FILE_LARGE_ADDRESS_AWARE を立てると、環境によっては 2GB を超えるメモリを扱う事ができるようになります。
Windows | 割り当てられるメモリ空間 |
Large Address Aware が有効でない 32bit Windows | 2GB |
Large Address Aware が有効な 32bit Windows | < 3GB |
64bit Windows (WOW64) | 4GB |
Large Address Aware が有効な 32bit Windows では 2GB を超える仮想アドレス空間が割り当てられるようになり、WOW64 環境 (64bit Windows) では 4GB の仮想アドレス空間が割り当てられるようになります。
|
このように *.dpr に記述すると、Large Address Aware 対応アプリケーションにできます。32bit アプリケーションのままでも、64bit OS 上で動作させるメリットを享受できるという事ですね。
なお、{$SetPEFlags} コンパイラ指令は少なくとも Delphi 7 またはそれ以降で利用可能です。但し、定数が Windows.pas に定義されていない場合があります (64bit Windows 登場以前の環境ですから)。
|
但し、このフラグを有効にするには Integer によるポインタ操作をしていない事が条件です。ポインタを Integer でキャストしている場合には正常動作しない可能性があります。
PE ヘッダのフラグに関する Delphi のトピックとしては DocWiki の "PE (portable executable) header flags (Delphi) (DocWiki)" に詳細があります。
BACK |