Unix の世界では、64 ビット プラットフォームの整数とポインターのサイズについていくつかの取り決めがありました。主に広く使用されている 2 つは、ILP64 (実際には、この例はごくわずかです。Cray はそのような例の 1 つです) と LP64 (他のほとんどすべてのもの) です。頭字語は、「int、long、ポインターは 64 ビット」および「long、ポインターは 64 ビット」に由来します。
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64
ILP64 システムは、 LP64を支持して放棄されました(つまり、Aspen グループの推奨に基づいて、後のほとんどすべての参加者が LP64 を使用しました。64 ビット操作の長い遺産を持つシステムのみが別のスキームを使用します)。最新の 64 ビット Unix システムはすべて LP64 を使用しています。MacOS X と Linux はどちらも最新の 64 ビット システムです。
Microsoft は、64 ビットへの移行に別の方式を使用しています: LLP64 (「long long、ポインターは 64 ビットです」)。これには、32 ビット ソフトウェアをそのまま再コンパイルできるというメリットがあります。他の人が行うこととは異なるというデメリットがあり、64 ビットの容量を活用するにはコードを修正する必要があります。改訂は常に必要でした。Unix プラットフォームで必要なリビジョンとは異なるリビジョンのセットでした。
プラットフォームに中立な整数型名を中心にソフトウェアを設計する場合、おそらく C99<inttypes.h>
ヘッダーを使用します。プラットフォームで型が使用可能な場合、符号付き (一覧表示) と符号なし (一覧表示なし; 接頭辞「u」) で提供されます。
int8_t
- 8 ビット整数
int16_t
- 16 ビット整数
int32_t
- 32 ビット整数
int64_t
- 64 ビット整数
uintptr_t
- ポインタを保持するのに十分な大きさの符号なし整数
intmax_t
- プラットフォームでの整数の最大サイズ ( よりも大きい場合がありますint64_t
)
その後、重要な場合はこれらの型を使用し、システム型 (異なる場合があります) には細心の注意を払ってアプリケーションをコーディングできます。型がありますintptr_t
- ポインタを保持するための符号付き整数型です。これを使用しないか、2 つの値の減算の結果としてのみ使用することを計画する必要がありuintptr_t
ます ( ptrdiff_t
)。
しかし、質問が (信じられないことに) 指摘しているように、64 ビット マシンの整数データ型のサイズにはさまざまなシステムがあります。それに慣れる; 世界は変わらない。