意外に簡単? x64アプリケーション開発環境の構築(2/2 ページ)
64ビット環境のうんちくはもうたくさん、実際のアプリケーションの開発に役立つ知識が欲しい、という方のために開発面にも踏み込んでいこう。まず開発環境の構築から行う(特集:64ビットコンピューティング最前線)。
x64のアドレス空間
プロセッサが64ビット対応になって何がうれしいかというと、まず広大なアドレス空間を利用できるようになったことでしょう。試しに32ビットシステムと64ビットシステム用の同じプログラムで、どれだけのメモリを利用できるかという点をList1のプログラムで確認してみることにします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果はTable4のとおりで(付録CD-ROMに実行画面のスクリーンショットを収録)、32ビットシステムでは2Gバイトまでしか仮想アドレスがサポートされていなかったのに対し、64ビットシステムでは8Tバイトもの仮想アドレスを利用できることが分かります。しかし、ちょっと待ってください。8Tバイトというと、プロセッサが使用できる最大仮想アドレスサイズには達していません。これはx64版のWindowsの仕様によるものです。しかし、32ビットシステムで利用可能だった2Gバイトのアドレス空間に比べるとはるかに大きな値となっていることがわかります。Table5にメモリの仕様を示します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ネイティブ64ビット型
汎用レジスタが64ビットに拡張され、数も増えたということは前述したとおりですが、ロングモード(IA-32eモード)では、このレジスタをネイティブな64ビットデータ型として利用できます(ユーザーアプリケーションは64ビットモードのみ)。
64ビットのデータ型をネイティブで利用しているかどうかを、List2に示すような単純な64ビット値の乗算プログラムで確認してみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
List2を32ビットアプリケーションとしてビルドしたあと、その逆アセンブルしたものがList3です[注2]。それぞれの命令が何をしているか、分かりやすいように各行にコメントをつけておきました。32ビットシステムでは64ビットの値を計算するのに桁上がりや符号拡張が必要になるために、かなり長い命令が生成され、さらに関数コールまで行われていることが分かります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
一方、64ビットアプリケーションとしてビルドしたあと、逆アセンブルしたものがList4です。List3と比較して、とてもシンプルな形になっています。64ビットシステムでは64ビットの値をネイティブでサポートしているため、たった1つの命令で計算が完了するのです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
また、関数コールやスタックの利用もなく、よりシンプルな形になったということは、当然処理速度の向上も期待できることになります。64ビットのネイティブ化によって、より大きな値を扱う計算がいかに改善されるかは、この例で見てとることができるかと思います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
関連記事
- 特集:64ビットコンピューティング最前線
- あなたホントに64ビットを説明できますか?
- 64ビットへの移行で懸念される問題――基礎編
- 64ビット対応プロセッサを3分で理解する
- 64ビットになると何が変わる?――64ビットプログラミングのデータモデル
- 64ビットプログラミングのポイント
- 時代に遅れないためのWin64用アプリケーション開発
- 64ビットWindows環境の開発で注意したいポイント
- 言えないと恥ずかしいAMD64とEM64Tの違い
- x64の3つの動作モードを知る
- x64のレジスタ拡張
関連リンク
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.