Share via


64 ビット アプリケーション

更新 : 2010 年 8 月

アプリケーションをコンパイルするときに、Windows 64 ビット オペレーティング システム上で、ネイティブ アプリケーションとして実行するか、または WOW64 の制御下で実行するかを指定することができます。 WOW64 は互換環境であり、32 ビット アプリケーションを 64 ビット オペレーティング システム上で実行できるようにします。 WOW64 は、システムにインクルードされています。

解説

.NET Framework 1.0 および 1.1 リリースでビルドされたアプリケーションはすべて、32 ビット アプリケーションとして扱われます。そして、64 ビット オペレーティング システムでは常に、32 ビット共通言語ランタイム (CLR: Common Language Runtime) 上で、WOW64 のもとで実行します。 また、.NET Framework Version 4 でビルドされた 32 ビット固有のアプリケーションは、64 ビット システムでは WOW64 のもとで実行します。

Visual Studio は、x86 コンピューターには 32 ビット版の CLR をインストールし、64 ビットの Windows コンピューターには、32 ビット版の CLR と適切な 64 ビット版の CLR を両方インストールします (Visual Studio 2010 は、32 ビット アプリケーションなので、64 ビット Windows システムにインストールすると WOW64 の制御下で実行されます)。

メモメモ

x86 エミュレーションと、Itanium プロセッサ ファミリ向け WOW64 サブシステムの設計のために、アプリケーションの実行は単一のプロセッサ上に制限されます。これらの要因により、Itanium ベースのシステム上で実行する 32 ビット .NET Framework アプリケーションのパフォーマンスとスケーラビリティは低下します。.NET Framework 1.1 を使用するアプリケーションは、対話的なクライアント アプリケーションで使用し、高負荷の ASP.NET アプリケーションなど高いパフォーマンスまたはスケーラビリティが要求されるアプリケーションでは使用しないことをお勧めします。可能な場合は、パフォーマンスおよびスケーラビリティを向上させるために、Itanium ベースのシステム用のネイティブ 64 ビット サポートを含む .NET Framework Version 4 を使用してください。

64 ビット Windows オペレーティング システムで 64 ビット マネージ アプリケーションを実行するときは、最大 2 GB のオブジェクトを作成できます。

多くのアセンブリは 32 ビットの CLR と 64 ビットの CLR で同じように実行します。 しかし、一部のプログラムではその動作が CLR によって異なります。次に、その理由を示します。

  • プラットフォームによってメンバーのサイズが変わる構造体 (ポインター型など)

  • 定数のサイズを含むポインター演算

  • ハンドルに IntPtr ではなく Int32 を使用した不適切なプラットフォーム呼び出しまたは COM 宣言

  • IntPtr から Int32 へのキャスト

32 ビット アプリケーションを 64 ビットの CLR に移植して実行する方法の詳細は、MSDN Web サイトの「MSDN ライブラリ (日本語版)」を参照してください。

一般的な 64 ビット プログラミングについて

64 ビット プログラミングの一般的な問題については、次のドキュメントを参照してください。

64 ビット アプリケーションを作成するためのコンパイラのサポート

既定では、.NET Framework 2.0 を使用して 32 ビット コンピューターまたは 64 ビット コンピューターでアプリケーションをビルドする場合、アプリケーションは 64 ビット コンピューターでネイティブ アプリケーションとして (すなわち、WOW64 の制御下ではなく) 実行します。 次の表に、Visual Studio コンパイラを使用して、ネイティブなアプリケーションとして実行する 64 ビット アプリケーション、WOW64 の下で実行する 64 ビット アプリケーション、またはその両方が可能な 64 ビット アプリケーションを作成するための方法を説明するドキュメントを示します。

コンパイラ

コンパイラ オプション

Visual Basic

/platform (Visual Basic)

Visual C#

/platform (C# コンパイラ オプション)

Visual C++

/clr:safe を使用すると、プラットフォームに依存しない、Microsoft Intermediate Language (MSIL) アプリケーションを作成できます。 詳細については、「/clr (共通言語ランタイムのコンパイル)」を参照してください。

Visual C++ には、それぞれの 64 ビット オペレーティング システムを対象とする個別のコンパイラが含まれます。 Visual C++ を使用して 64 ビット Windows オペレーティング システム上で実行するネイティブ アプリケーションを作成する方法の詳細については、「Visual C++ による 64 ビット プログラミング」を参照してください。

JScript

/platform (Visual Studio - JScript)

.exe ファイルまたは .dll ファイルのステータスの特定

.exe ファイルまたは .dll ファイルが、特定のプラットフォーム上または WOW64 の下でのみ動作するように意図されているかどうかを確認するには、コマンド プロンプトで corflags.exe を使用します。 また、corflags.exe を使用して、.exe ファイルまたは .dll ファイルのプラットフォームのステータスを変更できます。 詳細については、「CorFlags.exe (CorFlags 変換ツール)」を参照してください。 Visual Studio アセンブリの CLR ヘッダー (または COM+ ランタイム ヘッダー) のメジャー ランタイム バージョン番号が 2、マイナー ランタイム バージョン番号が 5 に設定されています (Visual Studio .NET 2003 アセンブリでは 0)。 マイナー ランタイム バージョンが 0 に設定されたアプリケーションは、レガシ アプリケーションとして扱われ、常に WOW64 の下で実行されます。

プログラムによって .exe または .dll を照会し、それが特定のプラットフォーム上または WOW64 の下でのみ動作するように意図されているかどうかを確認するには、GetPEKind メソッドを使用します。

参照

その他の技術情報

Windows-Based Applications and Components

履歴の変更

日付

履歴

理由

2010 年 8 月

リンクおよびバージョン番号を更新しました。

情報の拡充