(PTPROGY)読み:データがたモデル品詞:名詞データ型の大きさなどを定義するもの。処理系が用いるデータ型の大きさなどを定義するものであり、特にプログラミング環境で重要となる。現在使われているプログラミング言語には、整数型の実際の大きさを保証しないものがあり、データ型モデルに応じて変化する。ある特定のデータ型モデルに依存したプログラムも簡単に書くことができるが、そのようなものは移植性が無いということである。特徴16→3216ビットから32ビットに移行する時代、Cなどでこの問題が頻発した。16ビット環境では、変数長は次のようであった。(far修飾子を付けると32ビット)32ビット環境では、intとポインターが32ビット化された。この当時、特にx86環境ではnearポインターとfarポインターがあり、実装によりhugeポインターも提供された。i386以上の32ビット環境ではポインターはリニアになり、32ビット長となった。当時のCには独特の修飾子nearとfarが存在したが、32ビット環境では不要になった。Windowsでは関数の呼び出し方も変更されたため、大きな書き換えが必要となった。大まかに、64ビット用には次の三種類のデータモデルが存在する。実装例は少ない処理系によっては複数のデータモデルに対応し、コンパイラーのオプションで切り替えられるものもある。x64に対応したLinux用GCCでは、-m32オプションでILP32、-m64オプションでLP64が選択される。-m32では、出力されるバイナリはIA-32用のものである。ILP32一般的な32ビット環境で、int、long、ポインターが32ビットである。longを提供する処理系も一般化した。LLP6464ビット実装モデルの一つ目。ポインターのみを64ビット化したもの。Windowsの64ビット版(Win64)で採用された。ポインター以外の各整数型はILP32と同じため、ソースの互換性が高く64ビット化において最も問題が少ないと考えられているモデルである。long型にポインターを代入するような不適切な処理をしているプログラムは、プログラムを書き換えないと移植できない。longが32ビットのため出来ない。相互の移植性が必要な場合は、処理の方法等を含めた検討が必要である。LP6464ビット実装モデルの二つ目。ポインターとlongを64ビット化したもの。64ビットLinuxで採用された。x64のほか、AlphaやSPARC-64用のLinuxが該当する。ポインターをint型に代入するようなプログラムは移植できないが、longに代入するプログラムはデータ長が同じため問題が顕著化せず、そのまま移植できる。intとlongの長さが違うため、漠然と同じであることを想定したようなプログラムで問題が生じる恐れがある。ILP6464ビット実装モデルの三つ目。ポインターとint以上の変数を64ビット化したもの。実装例は少なく、殆ど知られていない。LP64と比較し、longだけでなくintも64ビット化されている。intとlongのデータ長が同じため、このような実装を想定した32ビット用プログラムの移植性が良いと見込まれる。ポインターをintやlongに代入するような不適切な処理をしているプログラムでも、データ長が同じため問題が顕著化せず、そのまま移植できる。逆に、intが32ビットであることを想定したプログラムは書き換えが必要となる。言え、32ビット長の普通の変数が無い(shortは16ビットなので、int32_tやuint32_tを使わねばならない)という問題もあり、案外と使いにくいモデルでもある。