2024/04/24「多機能ファイラーAs/Rの魅力と活用法」を出版、KView32公開

C++BuilderでのWindows の組み込み型のサイズ

C++Builder

embacaderoのヘルプに、C++Builder における 64 ビット OS のデータ型と 32 ビット OS のデータ型の相違点と類似点をまとめた資料がありましので以下に説明します。

Windowsで良く使う定義

C++Builderで、Windowsのアプリを作成する場合も、SDKで使われている以下の3つの型定義を良く使用します。

サイズ
BYTE1バイト(符号無し)
WORD2バイト(符号無し)
DWORD4バイト(符号無し)
Windowsで良く使う定義

整数型

Win64 では、System::NativeInt/ssize_t は、Win32 の System::NativeInt/ssize_t の 2 倍のサイズです。
同様に、System::NativeUInt/ssize_t は、Win32 の System::NativeUInt/size_t の 2 倍のサイズです。

符号付き整数符号なし整数C++/32C++/64解説
signed charSystem::Byte、unsigned char1 バイト
System::Smallint、shortSystem::Word、unsigned short2 バイト
System::LongInt、signed longSystem::LongWord、unsigned4 バイト
System::Integer、intSystem::Cardinal、unsigned int4 バイト
System::Int64、unsigned __int64、long longSystem::UInt64、unsigned __int64、unsigned long long8 バイト
System::NativeInt, ssize_tSystem::NativeUInt, size_t4 バイト8 バイト
整数型

System ユニットのメンバ(たとえば System::Byte など)を使用する場合は、#include <System.hpp> の記述が必要です。

ポインタ型

64 ビット版 Windows では、ポインタ型はすべて 8 バイト(32 ビット版 Windows のサイズの 2 倍)です。

ポインタ型C++/32C++/64
System::Pointer、void*4 バイト8 バイト
System::StringSystem::UnicodeString
System::TObject
System::TClass
System::IInterfaceSystem::DelphiInterface
System::AnsiStringSystem::AnsiStringT
System::WideString
System::UnicodeString
System::DynamicArray
System::PAnsiChar
System::PWideChar
System::PChar
ポインタ型

__closure

64 ビット Windows では、__closure のアラインメントは 16 バイトで、32 ビット Windows でのサイズの 2 倍になります。

浮動小数点型C++/32C++/64
__closure8 バイト16 バイト
__closure

浮動小数点型(Extended 型を含む)

Extended 型は、64 ビット版 Windows では、2 バイト分精度が低くなります。

詳細については、「4 ビット Windows システムでは Extended データ型のサイズは 2 バイト小さい」を参照してください。

浮動小数点型Delphi/32Delphi/64解説
Single4 バイト
Double8 バイト
Real8 バイト
Extended10 バイト8 バイトTExtended80Rec は、Win64 では 10 バイトです。
Real486 バイト
Comp8 バイト
Currency8 バイト
浮動小数点型

その他の型

Win64 では、ファイル サイズが増えています。

その他の型C++/32  C++/64  解説  
System::Boolean、bool1 バイト
System::ByteBool、unsigned char1 バイト
System::WordBool、unsigned short2 バイト
System::LongBool、unsigned int4 バイト
System::AnsiChar、char1 バイト
System::WideChar、wchar_t2 バイト
System::Char、wchar_t (Windows)、char16_t (macOS)2 バイト
System::ShortString256 バイト
Variant/OleVariant16 バイト24 バイト
その他の型

定数

定数C++/32  C++/64  
MaxInt$7fffffff
MaxLongInt$7fffffff
定数

拡張整数型: __int8、__int16、__int32、__int64

サイズを整数型に対して指定することができます(メモリで占有されるビット数)。

適切な接尾辞(i16ui32、など)を拡張整数定数に使用しなければなりません。

種類定数内の接尾辞

領域
__int8i8__int8 c = 127i8;8 ビット
unsigned __int8ui8unsigned __int8 c = 240ui8;8 ビット
__int16i16__int16 s = 32767i16;16 ビット
unsigned __int16ui16unsigned __int16 s = 64532ui16;16 ビット
__int32i32__int32 i = 123456789i32;32 ビット
unsigned __int32ui32unsigned __int32 i = 223456789ui32;32 ビット
__int64i64__int64 big = 12345654321i64;64 ビット
unsigned __int64ui64unsigned __int64 hugeInt = 1234567887654321ui64;64 ビット
拡張整数型

参考URL

以下の、URLも参考にしてください。

タイトルとURLをコピーしました