検索
特集

64ビットになると何が変わる?――64ビットプログラミングのデータモデル64ビットコンピューティング最前線(2/2 ページ)

システムが64ビットになるとプログラム的には何が変わるのか。3つの基本的な64ビットプログラミングデータモデルを取り上げながら、理解を深めていこう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

LP64

 LP64は、主にSGIをはじめとするUNIX系の環境で採用される64ビットプログラミングデータモデルです。「I32LP64」と呼ばれることもあります。

 LP64では、ポインタが64ビットになりますが、int型は従来どおり32ビットのままです。しかし、注意しなければならないのはlong型の扱いです。LP64のデータモデルでは、long型は64ビットになります。

LLP64

 LLP64は、Windows系の環境で用いられる64ビットプログラミングデータモデルです。「IL32P64」と呼ばれることもあります。

 LLP64では、ポインタだけが64ビットになります。int型とlong型は32ビットのままです。64ビットの型を使う場合は、「__int64」など別途明示的に宣言されている型を使います。

 なお、Windows環境については、のちほど新しく定義されたデータ型を紹介します。

ILP64

 ILP64は、ポインタもint型もlong型も、すべて64ビットとして扱われます。SGIはILP64の64ビットプログラミングデータモデルもサポートしていますが、どちらかというとLP64のほうを好んで使っているようです。

データモデルの相違に注意

 わかりやすいよう、3つのデータモデルをTable 5にまとめてみました。この3つのデータモデルを比較すると一目瞭然なのですが、それぞれのシステム向けに別のコンパイラを用いてリコンパイルする場合は、整数データの型に注意しなければなりません。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 たとえば、long型を32ビットとして扱っているようなC/C++のコードをLP64環境に持ってくる際はlong型に注意しなければなりませんし、その逆のケースも同じです。

 このようなデータモデルの違いは、C/C++プログラミング言語に新しい基本的なデータ型を加えるというメカニズムがないために起こっています。64ビットシステムへの移行にあたり、C/C++アプリケーション開発者はスカラの(単一の)計算をする場合、既存のデータ型のマッピングを変えるか、または新しいデータ型を加える必要があります(64ビットへの移行にあたり、それまで「整数=32ビット」があたりまえと考えてしまっていたプログラマは、移植の際に自分のプログラムコードを再度見直す必要性が出てくるかもしれません)。

 3つのうちのどのプログラミングデータモデルが優れているかというと、それぞれ一長一短があるので一概には答えられません。ただ、コンピュータの立場から考えると64ビットで統一されているILP64が、人間の立場から考えると従来の ILP32環境からほんの少しの変更が加えられたLLP64が、もっとも混乱の少なく扱いやすいといえるかもしれません。LP64は、これら両者のちょうど中間に位置するプログラミングデータモデルといえます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

前のページへ |       

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

ページトップに戻る