64 ビット アプリケーション
更新 : 2007 年 11 月
アプリケーションをコンパイルする際に、64 ビット オペレーティング システム上でネイティブ アプリケーションとして実行するか、または WOW64 の制御下で実行するかを指定することができます。WOW64 は、オペレーティング システムにより提供される互換環境であり、32 ビット アプリケーションを Windows 64 ビット オペレーティング システム上で実行することを可能にします。
解説
.NET Framework 1.0 および 1.1 リリースと共にビルドされたアプリケーションはすべて、32 ビット アプリケーションとして扱われます。そして、64 ビット オペレーティング システムでは常に、32 ビット共通言語ランタイム (CLR: Common Language Runtime) 上で、WOW64 のもとで実行します。さらに、.NET Framework Version 2.0 でビルドされた 32 ビット固有のアプリケーションは、64 ビット プラットフォーム上で、WOW64 のもとで実行します。
Visual Studio は、x86 コンピュータ上では 32 ビットの Version 2.0 の CLR をインストールし、64 ビット Windows コンピュータ上では 32 ビットおよび適切な 64 ビットの両方の Version 2.0 CLR をインストールします (Visual Studio 2008 は、32 ビット アプリケーションであり、64 ビット Windows オペレーティング システムにインストールすると WOW64. の制御下で実行されます)。
メモ : |
---|
x86 エミュレーションと、Itanium プロセッサ ファミリ向け WOW64 サブシステムの設計のために、アプリケーションの実行は単一のプロセッサ上に制限されます。Itanium ベースのシステム上で実行する 32 ビット .NET Framework アプリケーションのパフォーマンスとスケーラビリティは、シングル プロセッサでの実行と x86 エミュレーションにより低下します。.NET Framework Version 1.1 を使用するアプリケーションは、対話的なクライアント アプリケーションで使用し、高負荷の ASP.NET アプリケーションなど高いパフォーマンスまたはスケーラビリティが要求されるアプリケーションでは使用しないことをお勧めします。パフォーマンスおよびスケーラビリティを向上させるために、Itanium ベースのシステム用のネイティブ 64 ビット サポートを含む .NET Framework Version 2.0 を使用することを考慮してください。 |
32 ビット Windows オペレーティング システムではオブジェクトのサイズに 2GB の制限があるのに対し、64 ビット Windows オペレーティング システム上で 64 ビット マネージ アプリケーションを実行している場合には 2GB 以上のオブジェクトでも作成できます。
多くの場合、アセンブリは 32 ビットまたは 64 ビットの CLR で同じように実行します。次に、64 ビット CLR によりプログラムを実行した場合にプログラムの動作が異なる理由をいくつか示します。
プラットフォームによってメンバのサイズが変わる構造体 (ポインタ型など)
定数のサイズを含むポインタ演算
ハンドルに IntPtr ではなく Int32 を使用した不適切なプラットフォーム呼び出しまたは COM 宣言
IntPtr から Int32 へのキャスト
64 ビット CLR 上で実行するように 32 ビット アプリケーションを移植する方法の詳細については、https://msdn.microsoft.com/library/?url=/library/en-us/dndotnet/html/64migrate.asp を参照してください。
一般的な 64 ビット プログラミングについて
64 ビット プログラミングの一般的な問題については、次を参照してください。
Programming Guide for 64-bit Windows (Windows SDK ドキュメント、MSDN Web サイトで入手可能)
共通言語ランタイムの 64 ビット バージョンのダウンロードについては、https://www.microsoft.com/japan/msdn/netframework/downloads を参照してください。
64 ビット アプリケーションを作成するための Visual Studio 開発環境のサポート機能については、「Visual Studio 開発環境の 64 ビット サポート」を参照してください。
64 ビット アプリケーションを作成するためのコンパイラのサポート
(32 ビットまたは 64 ビットのコンピュータ上で) .NET Framework 2.0 を使用してビルドしたアプリケーションは、既定で、64 ビット コンピュータ上で (WOW64 の制御下ではなく) ネイティブなアプリケーションとして実行されます。次の表に、Visual Studio コンパイラを使用して、ネイティブなアプリケーションとして実行する 64 ビット アプリケーション、WOW64 の下で実行する 64 ビット アプリケーション、またはその両方で実行できる 64 ビット アプリケーションを作成するための方法を説明するトピックを示します。
コンパイラ |
コンパイラ オプション |
---|---|
Visual Basic |
|
Visual C# |
|
Visual C++ |
/clr:safe を指定することにより、プラットフォームに対して柔軟な MSIL アプリケーションを作成できます。詳細については、「/clr (共通言語ランタイムのコンパイル)」を参照してください。 Visual C++ には、それぞれの 64 ビット オペレーティング システムを対象とする個別のコンパイラが付属します。Visual C++ を使用して 64 ビット Windows オペレーティング システム上で実行するネイティブ アプリケーションを作成する方法の詳細については、「Visual C++ による 64 ビット プログラミング」を参照してください。 |
JScript |
.exe または .dll のステータスの特定
コマンド ラインで corflags.exe を使用することにより、.exe または .dll で特定のプラットフォーム上または WOW64 の下でのみ実行することが意図されているかどうかを特定します。また、corflags.exe を使用して、.exe または .dll. のプラットフォームのステータスを変更できます。詳細については、「CorFlags 変換ツール (CorFlags.exe)」を参照してください。Visual Studio アセンブリの CLR ヘッダー (または COM+ ランタイム ヘッダー) では、メジャー ランタイム バージョン番号が 2、マイナー ランタイム バージョン番号が 5 に設定されています。Visual Studio 2003 アセンブリでは、それぞれ 2 および 0 に設定されています。マイナ ランタイム バージョンを 0 に設定されたアプリケーションはすべて、レガシ アプリケーションとして扱われ、64 ビット コンピュータ上では常に WOW64 の下で実行されます。
GetPEKind を使用して、プログラムによって exe または .dll に対してクエリし、それが特定のプラットフォーム上で、または WOW64 の下でのみ実行することが意図されているかどうかを確認します。