Borland Pascal | GNU Pascal | Bits (1) | Signed
|
ShortInt | ByteInt | 8 | yes
|
Integer | ShortInt | 16 | yes
|
LongInt | Integer | 32 | yes
|
Comp | LongInt, Comp | 64 | yes
|
Byte | Byte | 8 | no
|
Word | ShortWord | 16 | no
|
n/a | Word | 32 | no
|
n/a | LongWord | 64 | no
|
(1) The size of the GNU Pascal types may depend on the platform. The sizes above apply to 32 bit platforms, including the IA32.
If you care for types with exactly the same size as in Borland Pascal, take a look at the System unit and read its comments.
You can get the size of a type with SizeOf in bytes (like in Borland Pascal) and with BitSizeOf in bits, and you can declare types with a specific size (given in bits), e.g.:
program IntegerSizeDemo; type MyInt = Integer attribute (Size = 42); { 42 bits, signed } MyWord = Word attribute (Size = 2); { 2 bits, unsigned, i.e., 0 .. 3 } MyCard = Cardinal attribute (Size = 2); { the same } HalfInt = Integer attribute (Size = BitSizeOf (Integer) div 2); { A signed integer type which is half as big as the normal Integer type, regardless of how big Integer is on any platform the program is compiled on. } begin end.
Borland Pascal | GNU Pascal
|
Single | Single, ShortReal
|
Real | n/a (1)
|
Double | Double, Real
|
Extended | Extended, LongReal
|
Comp | LongInt, Comp (see above)
|
(1) But see BPReal, RealToBPReal and
BPRealToReal in GPC's System
unit.
type MyRec = record f, o, oo: Boolean; Bar: Integer end;
has 8 bytes, not 7. Use the --pack-struct
option or declare
the record as packed to force GPC to pack it to 7 bytes.
However, note that this produces somewhat less efficient code on the
IA32 and far less efficient code on certain other processors.
Packing records and arrays is mostly useful only when using large
structures where memory usage is a real concern, or when reading or
writing them from/to binary files where the exact layout matters.