embacaderoのヘルプに、C++Builder における 64 ビット OS のデータ型と 32 ビット OS のデータ型の相違点と類似点をまとめた資料がありましので以下に説明します。
Windowsで良く使う定義
C++Builderで、Windowsのアプリを作成する場合も、SDKで使われている以下の3つの型定義を良く使用します。
型 | サイズ |
---|---|
BYTE | 1バイト(符号無し) |
WORD | 2バイト(符号無し) |
DWORD | 4バイト(符号無し) |
整数型
Win64 では、System::NativeInt/ssize_t は、Win32 の System::NativeInt/ssize_t の 2 倍のサイズです。
同様に、System::NativeUInt/ssize_t は、Win32 の System::NativeUInt/size_t の 2 倍のサイズです。
符号付き整数 | 符号なし整数 | C++/32 | C++/64 | 解説 |
---|---|---|---|---|
signed char | System::Byte、unsigned char | 1 バイト | ||
System::Smallint、short | System::Word、unsigned short | 2 バイト | ||
System::LongInt、signed long | System::LongWord、unsigned | 4 バイト | ||
System::Integer、int | System::Cardinal、unsigned int | 4 バイト | ||
System::Int64、unsigned __int64、long long | System::UInt64、unsigned __int64、unsigned long long | 8 バイト | ||
System::NativeInt, ssize_t | System::NativeUInt, size_t | 4 バイト | 8 バイト |
ポインタ型
64 ビット版 Windows では、ポインタ型はすべて 8 バイト(32 ビット版 Windows のサイズの 2 倍)です。
__closure
64 ビット Windows では、__closure のアラインメントは 16 バイトで、32 ビット Windows でのサイズの 2 倍になります。
浮動小数点型 | C++/32 | C++/64 |
---|---|---|
__closure | 8 バイト | 16 バイト |
浮動小数点型(Extended 型を含む)
Extended 型は、64 ビット版 Windows では、2 バイト分精度が低くなります。
詳細については、「4 ビット Windows システムでは Extended データ型のサイズは 2 バイト小さい」を参照してください。
浮動小数点型 | Delphi/32 | Delphi/64 | 解説 |
---|---|---|---|
Single | 4 バイト | ||
Double | 8 バイト | ||
Real | 8 バイト | ||
Extended | 10 バイト | 8 バイト | TExtended80Rec は、Win64 では 10 バイトです。 |
Real48 | 6 バイト | ||
Comp | 8 バイト | ||
Currency | 8 バイト |
その他の型
Win64 では、ファイル サイズが増えています。
その他の型 | C++/32 | C++/64 | 解説 |
---|---|---|---|
System::Boolean、bool | 1 バイト | ||
System::ByteBool、unsigned char | 1 バイト | ||
System::WordBool、unsigned short | 2 バイト | ||
System::LongBool、unsigned int | 4 バイト | ||
System::AnsiChar、char | 1 バイト | ||
System::WideChar、wchar_t | 2 バイト | ||
System::Char、wchar_t (Windows)、char16_t (macOS) | 2 バイト | ||
System::ShortString | 256 バイト | ||
Variant/OleVariant | 16 バイト | 24 バイト |
定数
定数 | C++/32 | C++/64 |
---|---|---|
MaxInt | $7fffffff | |
MaxLongInt | $7fffffff |
拡張整数型: __int8、__int16、__int32、__int64
サイズを整数型に対して指定することができます(メモリで占有されるビット数)。
適切な接尾辞(i16、ui32、など)を拡張整数定数に使用しなければなりません。
種類 | 定数内の接尾辞 | 例 | 領域 |
---|---|---|---|
__int8 | i8 | __int8 c = 127i8; | 8 ビット |
unsigned __int8 | ui8 | unsigned __int8 c = 240ui8; | 8 ビット |
__int16 | i16 | __int16 s = 32767i16; | 16 ビット |
unsigned __int16 | ui16 | unsigned __int16 s = 64532ui16; | 16 ビット |
__int32 | i32 | __int32 i = 123456789i32; | 32 ビット |
unsigned __int32 | ui32 | unsigned __int32 i = 223456789ui32; | 32 ビット |
__int64 | i64 | __int64 big = 12345654321i64; | 64 ビット |
unsigned __int64 | ui64 | unsigned __int64 hugeInt = 1234567887654321ui64; | 64 ビット |
参考URL
以下の、URLも参考にしてください。