Normalerweise sind die Daten in einem Record an 4-Byte Grenzen ausgerichtet. Beispiel:
Delphi-Quellcode:
TDemo = record
b: Byte;
c: Byte;
end;
Ausrichtung im Speicher:
Code:
0 1 2 3 | 4 5 6 7
b b | c c
Deklarierst du den Record als packed sieht der Record im Speicher wie folgt aus:
Die Ausrichtung an 4-Byte Grenzen macht die Verarbeitung einfacher, weil eine 32-.Bitz CPU sowieso immer 4-Byte auf einmal aus dem Speicher holt, egal, um was für einen datentyp es sich handelt. Sind die daten jetzt an 4-Byte Grenzen ausgerichtet, muss die CPU die Daten nicht noch "nachbearbeiten". Man hat also einen Performance Vorteil. Allerdings aus Sicht des Programmierers ist es praktischer einen Record als packed zu deklarieren, da man keine Probleme bekommt, wenn sich in Zukunft die Ausrichtung ändert; auf 64-Bit CPUs zum Beispiel.
Dann muss man noch manchmal berücksichtigen, wie
API-Funktionen Strukturen übergeben haben wollen.