Restrictions on packed types?
Peter Gerwinski
peter at agnes.dida.physik.uni-essen.de
Mon Feb 10 15:16:12 CET 1997
According to Jakob Heinemann:
> I read somewhere that GPC actually doesn't pack things in types which
> are
> declared as PACKED. Is this true? What about packed array's of char,
> i.e.
> non-varying strings?
It is true, but it only affects things which are smaller than one byte
or structures containings things which should be aligned on a 2- or
4-byte boundary.
One example:
Type
ByteInt = __byte__ Integer;
Byte = __unsigned__ ByteInt;
Var
AOC: array [ 1..100 ] of Char;
PAOC: packed array [ 1..100 ] of Char;
AOBoo: array [ 1..100 ] of Boolean;
PAOBoo: packed array [ 1..100 ] of Boolean;
AOBy: array [ 1..100 ] of Byte;
PAOBy: packed array [ 1..100 ] of Byte;
all have 100 bytes (while PAOBoo should have ( 100 + 7 ) div 8 bytes), and
MyRec: record
B: Byte;
C: Char;
I: Integer;
end (* MyRec *);
has 8 bytes, not 6.
\begin{sigh}
When we say that GPC "does not pack" this means about the same as
what Borland means when they claim that Borland Pascal "always packs".
The only difference is that Borland Pascal does not care about 32-bit
alignment and thus often produces records of smaller size - at the
expense of loss of speed.
\end{sigh}
Hope this helps,
Peter
Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer
peter.gerwinski at uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201]
maintainer GNU Pascal - http://home.pages.de/~gnu-pascal/ [970125]
More information about the Gpc
mailing list