64-bit Windows Data Types Compared to 32-bit Windows Data Types

From Appmethod Topics
Jump to: navigation, search

Go Up to 64-bit Cross-Platform Application Development for Windows


The following tables summarize the differences and similarities between 64-bit OS data types and 32-bit OS data types.

Object Pascal 32-bit and 64-bit Windows built-in type sizes

Integral types

On Win64, NativeInt is twice the size of the Win32 NativeInt, and NativeUInt is twice the size of the Win32 NativeUInt.

Signed Integer

Unsigned Integer

Object Pascal/32

Object Pascal/64

ShortInt

Byte

1 byte

SmallInt

Word

2 bytes

LongInt

LongWord

4 bytes

FixedInt

FixedUInt

4 bytes

Integer

Cardinal

4 bytes

Int64

UInt64

8 bytes

NativeInt

NativeUInt

4 bytes

8 bytes

Pointer types

On 64-bit Windows, all pointer types are 8 bytes, twice the size on 32-bit Windows.

Pointer types

Object Pascal/32

Object Pascal/64

Pointer

4 bytes

8 bytes

string

class instance

class reference

interface

AnsiString

WideString

UnicodeString

procedure pointer

dynamic array

PAnsiChar

PWideChar

PChar

Procedure of object

On 64-bit Windows, the alignment for a procedure of object is 16 bytes, twice the size on 32-bit Windows.

Procedure of object Object Pascal/32 Object Pascal/64 Comments
Size 8 bytes 16 bytes
Alignment 8 bytes 16 bytes Known as closure type

Floating-point types (including the Extended data type)

The Extended type has 2 bytes' worth less precision on 64-bit Windows than on 32-bit Windows (8 bytes vs 10 bytes)..

For more information, see The Extended Data Type Is 2 Bytes Smaller on 64-bit Windows Systems.

Floating point types

Object Pascal/32

Object Pascal/64

Comments

Single

4 bytes

Double

8 bytes

Real

8 bytes

Extended

10 bytes

8 bytes

TExtended80Rec has 10 bytes on Win64

Real48

6 bytes

Comp

8 bytes

Currency

8 bytes

Other types

On Win64, file size has increased.

Other types

Object Pascal/32

Object Pascal/64

Comments

Boolean

1 byte

ByteBool

1 byte

WordBool

2 bytes

LongBool

4 bytes

AnsiChar

1 byte

WideChar

2 bytes

Char

2 bytes

ShortString

256 bytes

string[N]

N+1 bytes

Variant / OleVariant

16 bytes

24 bytes

file

592 bytes

616 bytes

Text / TextFile

730 bytes

754 bytes

720 bytes in XE release

Constants

Constants

Object Pascal/32

Object Pascal/64

MaxInt

$7fffffff

MaxLongInt

$7fffffff

Appmethod C++ 32-bit and 64-bit Windows built-in type sizes

The following tables summarize the differences and similarities between 64-bit OS data types and 32-bit OS data types in Appmethod C++.

Note: In order to use members of the System unit (such as System::Byte), you need to #include <System.hpp>.

Integral types

On Win64, System::NativeInt/ssize_t is twice the size of the Win32 System::NativeInt/ssize_t.
Likewise, System::NativeUInt/ssize_t is twice the size of the Win32 System::NativeUInt/size_t.

Signed Integer

Unsigned Integer

C++/32

C++/64

Comments

signed char

System::Byte, unsigned char

1 byte

System::Smallint, short

System::Word, unsigned short

2 bytes

System::LongInt, signed long

System::LongWord, unsigned

4 bytes

System::Integer, int

System::Cardinal, unsigned int

4 bytes

System::Int64, unsigned __int64, long long

System::UInt64, unsigned __int64, unsigned long long

8 bytes

System::NativeInt, ssize_t

System::NativeUInt, size_t

4 bytes

8 bytes

Pointer types

On 64-bit Windows, all pointer types are 8 bytes, twice the size on 32-bit Windows.

Pointer types

C++/32

C++/64

System::Pointer, void*

4 bytes

8 bytes

System::String, System::UnicodeString

System::TObject

System::TClass

System::IInterface, System::DelphiInterface

System::AnsiString, System::AnsiStringT<code-page>

System::WideString

System::UnicodeString

System::DynamicArray

System::PAnsiChar

System::PWideChar

System::PChar

__closure

On 64-bit Windows, the alignment for a __closure is 16 bytes, twice the size on 32-bit Windows.

__closure 8 bytes 16 bytes

Floating-point types (including the Extended data type)

The Extended type has 2 bytes' worth less precision on 64-bit Windows.

For more information, see The Extended Data Type Is 2 Bytes Smaller on 64-bit Windows Systems.

Floating point types

C++/32

C++/64

Comments

System::Single, float

4 bytes

System::Double, double

8 bytes

System::Extended, long double

10 bytes

8 bytes

TExtended80Rec has 10 bytes on Win64

Real48

Not Supported

System::Comp

8 bytes

System::Currency

8 bytes

Other types

On Win64, file size has increased.

Other types

C++/32  

C++/64  

Comments   

System::Boolean, bool

1 byte

System::ByteBool, unsigned char

1 byte

System::WordBool, unsigned short

2 bytes

System::LongBool, unsigned int

4 bytes

System::AnsiChar, char

1 byte

System::WideChar, wchar_t

2 bytes

System::Char, wchar_t (Windows), char16_t (OSX)

2 bytes

System::ShortString

256 bytes

Variant / OleVariant

16 bytes

24 bytes

Constants

Constants

C++/32  

C++/64  

MaxInt

$7fffffff

MaxLongInt

$7fffffff

See Also