packed
is a reserved word. According to ISO 7185
Pascal it can precede array
and record
type
definitions to indicate that memory usage should be minimized for
variables of this type, possibly at the expense of loss of speed.
As a GNU Pascal extension, packed
can also be applied to
Subrange Types.
The reserved word packed
is defined in ISO 7185 Pascal.
According to ISO standard, only packed arrays of char with lower
bound 1 qualify as strings of fixed length. GNU Pascal neither requires
packed
nor the lower bound of 1 here.
program PackedDemo; type MonthInt = packed 1 .. 12; { needs one byte } FastMonthInt = 1 .. 12; { needs e.g. four bytes } FixString10 = packed array [1 .. 10] of Char; FoxyString10 = array [0 .. 9] of Char; Flags = packed array [1 .. 32] of Boolean; { needs four bytes } Int15 = Integer attribute (Size = 15); DateRec = packed record Day: 1 .. 31; { five bits } Month: MonthInt; { four bits } Year: Int15 { 15 bits = -16384 .. 16383 } end; Dates = array [1 .. 1000] of DateRec; var S: FixString10; T: FoxyString10; begin S := 'Hello!'; { blank padded } WriteLn (S); T := 'GNU Pascal'; { GPC extension: this also works. } WriteLn (T) end.
DateRec
has 24 bits = 3 bytes in total; Dates
has 3000 bytes.