データ型モデルと CRuby の型


(改訂 2010.08.20) 参考文献を追加し、その内容に合わせて修正。

僕は、様々なアーキテクチャで動かせるコードを書こうとしているとき、long と void* のサイズの関係などが分からなくなって手を止める事が結構あります。後学のために一度整理しておこうと思い、表にまとめてみました。

モデル名 sizeof(int) sizeof(long) sizeof(long long) sizeof(void*) 主なアーキテクチャ
LP32 2 4 - 4 ほぼ皆無 Win3.1など (16ビット環境)
ILP32 4 4 8 4 ほとんどの32ビット環境
LLP64 4 4 8 8 Win64
LP64 4 8 8 8 64ビットのLinux
ILP64 8 8 8 8 ほぼ皆無 SGI


NOTE: sizeof(char) == 1 と sizeof(short) == 2 はすべてで共通なので表から消しました。

CRuby が処理系の実装で使っているデータ型のうち、VALUE, BDIGIT, BDIGIT_DBL は上記の型のサイズに依存して決まります。LONG_LONG 型は C99 の long long 型と同じものと考えてください (移植性を高めるために別名を使っています)。

モデル名 VALUE BDIGIT BDIGIT_DBL
LP32 unsigned long unsigned int unsigned long
ILP32 unsigned long unsigned int unsigned LONG_LONG
LLP64 unsigned LONG_LONG unsigned int unsigned LONG_LONG
LP64 unsigned long unsigned int unsigned LONG_LONG
ILP64 unsigned long unsigned short unsigned long