Node:packed, Next:Page, Previous:Pack, Up:Reference

### packed

#### Synopsis

#### Description

`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.

#### Conforming to

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.

#### Example

    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.

#### See also

Keywords, Pack, Unpack, SizeOf, AlignOf, BitSizeOf.