64ビットの話題のつづきです。前回は、WOW64まで書きました。
このWOW64の存在もあり、64ビット、32ビットのアプリケーションのどちらも、64ビットプロセッサで動作することになります。ちなみに、Visual Studio 2005自身も、32ビットアプリケーションですが、WOW64で64ビット プロセッサ上で稼動させることができます。
C/C++を使ったUnmanaged Codeは、ターゲット プラットフォームを決めて、コンパイル・リンクされているので、64ビット上の動作の結果はシンプルです。指定したとおりです。
一方、Managed Codeの.NET Frameworkにおいては、.NET Frameworkは中間コードをベースに実行されるので、より柔軟です。また、これは、.NET Frameworkのside by side動作条件にも依存しています。
64ビットバージョンの.NET Framework 2.0は、32ビット版と同じ、(1)CLR、(2)Framework Class Libraries(FCL)および(3)SDKのコンンポーネントをもちます。そして、64ビット プロセッサでその動作環境が選択される基準は以下になります。
-
.NET Framework 1.0、1.1で書かれたアプリケーションは、WOW64で32ビットアプリケーションとして動作します。
-
.NET Framework 2.0の場合は、コンパイル時にx86, Itanium, x64, anycpu(デフォルト)を指定します。Anycpuの場合、64ビットプロセッサの場合は64ビットで動作し、32ビットプロセッサの場合32ビットで動作します。Visual Studio 2005では、Configuration Managerを使って、どのプラットフォームで動作させるかの指定ができます。
一般に32ビットと64ビットでの違いは、浮動小数点、メモリ境界、ポインタのアドレスの長さです。.NET Frameworkの場合も同様で、浮動小数点は、一部の操作で非互換な部分があります。メモリ境界は、32ビットの場合は、1、2、4、8バイトですが、64ビットは加えて10、16バイト目からも始まります。10バイトを超える場合は、16バイトの境界から始まります。ポインタは当然32ビットと64ビットの違いがあります。これらに対応する方法も提示されています。
64ビットといえば、サーバー側のデータベース管理システムの実行環境やCADなどの技術系のワークステーションとして注目しがちですが、ASP.NET、Webサービスのサーバーサイドのアプリケーション動作環境としても優れたプラットフォームになります。