【レポート】

「64bitへの移行は16bit→32bitより簡単」- AMD・MSカンファレンスより

1 Win64アプリを開発する際のガイドライン

    大塚実  [2004/04/27]

    日本AMDとマイクロソフトは22日、開発者向けに「AMD & Microsoft Software Developer Conference」を開催、AMD64のマーケティング戦略・アーキテクチャやWindows for 64-bit Extended Systemsについて、それぞれ両社より説明があった。マイクロソフトのサイトで公開されているのでご存じの方もいるだろうが、ここでは主に、マイクロソフトの2氏より説明のあったWindows for 64-bit Extended Systems関連の話題を中心にご紹介したい。

    Win64でもint/longは32bitサイズのまま

    マイクロソフトは現在、AMD64(およびIA-32e)プラットフォーム向けに「Windows XP 64-bit Edition for 64-bit Extended Systems」および「Windows Server 2003 for 64-bit Extended Systems」の開発を進めている。どちらも今年第4四半期の出荷を予定しているが、既報のように、前者は一般向けの早期評価プログラムも行われており、すでに入手して試しているユーザーも多いだろう。今回、これらのプラットフォームでのC/C++アプリケーション開発について、同社デベロッパーマーケティング本部 .NETマーケティング部 デベロッパーエバンジェリスト 佐藤直樹氏より説明があった。

    Win64アプリの開発はクロスコンパイラで

    最初に開発環境についてだが、現在、AMD64用のコンパイラはベータサイトより提供されている。これはWin32環境でのクロスコンパイラとなっており、オプションはほぼ32bitコンパイラと同一だが、ソースコードのポータビリティ(Win32/64間)に関する警告を出す「/Wp64」など、いくつかのオプションが追加されている。32bit版からの機能的な変更点としては、64bitコンパイラではインラインアセンブリはサポートしておらず、移行の際はその部分をC/C++等で書き換えるか、別モジュールとして外部に出す必要があるということだ。

    氏はデモンストレーションとして、64bit版Windows XP上で簡単なCUIアプリを作成。printf()のみのシンプルなコードだが、コンパイル・実行のあと、64bitアプリかどうか確認するためにdumpbinコマンドを使用し、実行ファイルのヘッダ情報を解析してみせた。特徴的なヘッダ情報として、対応マシンを表す"machine"が「AMD64」に、"magic #"が「PE32+」になっている様子などが紹介された。

    ソースコードを書いてコンパイル・実行したところ

    ヘッダ情報を確認してみる。「AMD64」となっている

    次に、Win64アプリを開発する際のガイドラインについて説明された。一番重要な点として氏が指摘したのが「計画」で、まず、本当にその32bitアプリを64bitアプリに移行する必要があるのかどうかという所から検討して欲しいという。「全てのアプリケーションが64bit対応になればアーキテクチャ的にも美しいが、開発コストやメンテナンスなど様々な問題も出てくる。場合によっては、部分的に64bitに移行するなどといったことも考えられる」(同氏)。

    開発におけるガイドラインとして紹介されたのは、「データモデル」「API」「プログラミングの注意点」の3項目。まずデータモデルについてだが、Win32環境とWin64環境でのデータモデルの違いはそれほど大きくない。Pointerこそ64bitになるものの、int/longともに32bitサイズのまま変更されておらず、ソースコードのコンパチビリティは高い。これは、「移行にかかるコストを最小限にしつつ、64bitのパワフルな環境のメリットを活かしたい」ことを目指したためであるという。ただ、長さを明示したい場合のために、「INT32」「INT64」などの型も導入されている。

    Win32/64、UNIXの各データモデル

    長さを明示できるデータ型も利用可能

    APIについても、大部分のAPIは変更なしで利用できる。ただ変更のあるものとしては、(1)拡張されたデータタイプを利用するために引数の型が変更、(2)64bit引数を2つの引数に分割するなどAPIそのものが変更、(3)WindowとClassに関するポリモーフィックなAPIなどを追加--といったものも一部あり、使用に際しては注意が必要だ。

    APIの変更があるものも

    追加されたAPI

    プログラミングの注意点としては、データアライメント、構造体、定数の扱いなどについて説明された。C/C++では通常、構造体がメモリ上に配置されるときなど、メモリアクセスを最適化するために各メンバ変数の適切なアライメントが行われる。ところが、メモリの基本となるサイズが32bitと64bitで異なるため、挿入されるパディングのサイズが変わる。また、希なケースだとは思うが、"-1"をわざわざ"0xffffffff"と補数表現していた場合、64bit環境では"-1"ではなくなってしまうなど、定数の扱いにも少し注意が必要となる。

    データのアライメント。この例はWin32での場合

    ポインタのほか、パディングでも長さが変わっている

    こういった注意点は存在するものの、それでも16bitから32bitへの移行に比べ、変化は小さいという。氏は以前、32bit環境への移行を行った際、「世界が変わった」という感じを受けたそうだが、今回の32bitから64bitへはそれほど大きな変化ではなく、「"ちょっと隣の家に入る"というような気楽さがある」とのことだ。「Platform SDKをダウンロードし、64bit開発に関する情報を確認してほしい」「注意深くソースコードを確認してほしい」と述べ、講演をまとめた。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン