// Total size = 12 bytes, alignment = 4 bytes (doubleword).
_declspec(align(4)) struct {
char a; // +0; size = 1 byte
short b; // +2; size = 2 bytes
char c; // +4; size = 1 byte
int d; // +8; size = 4 bytes
}
// Total size = 8 bytes, alignment = 8 bytes (quadword).
_declspec(align(8)) union {
char *p; // +0; size = 8 bytes
short s; // +0; size = 2 bytes
long l; // +0; size = 4 bytes
}
type
Test = record
a : byte;
b : int16;
c : byte;
d : integer;
end;
Test2 = record
case Integer of
0: (p : Pointer);
1: (s : byte);
2: (l: Integer);
end;
begin
try
Writeln(SizeOf(test));
Writeln(SizeOf(test2));
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.