Data Alignment

In der Rechnerarchitektur (Computer) bezeichnet man ein Datum (Operand) mit n Bytes als im Speicher ausgerichtet (Data Alignment), wenn deren Adresse A ein ganzahliges Vielfaches von n ist ( A mod n = 0). Falls n jedoch keine Potenz von 2 ist, muss vorher noch n auf die nächst höhere Potenz von 2 aufgerundet werden. Beispiel: Ein 5 Byte Datum muss wie ein 8 Byte Datum ausgerichtet werden.

Ist die Adresse eines mehrbyte Datum (Operand) kein derartiges Vielfaches, so ist das Datum nicht ausgerichtet (Data Misalignment). Ein 1 Byte Datum ist immer ausgerichtet.

Typischerweise erfolgt eine byteweise Adressierung des Hauptspeichers und es kann auf eine Folge von m Bytes in einem Takt zugegriffen werden. Die Anzahl m ist die Breite des Datenbusses in Bytes. Übliche Datenbusbreiten sind 16 Bit (m = 2), 32 Bit (m = 4) und 64 Bit (m = 8).

Sind die Operanden im Speicher ausgerichtet, ist bei n kleiner gleich m nur jeweils ein Speicherzugriff nötig. Auch bei n größer m sind grundsätzlich nur die jeweils minimale Anzahl von Speicherzugriffen nötig. Der Nachteil besteht darin, dass ggf. der Speicher nicht lückenlos genutzt werden kann. Bei obigem Beispiel des 5 Byte Datum bleiben bei korrektem Data Alignment 3 Achtel des Speichers ungenutzt.

Sind die Operanden im Speicher nicht ausgerichtet, so ist eine lückenlose Nutzung des Speichers bei beliebiger Mischung der Datenformate möglich. Allerdings müssen abhängig von der zufälligen Anordnung ggf. mehr Speicherzugriffe erfolgen, als eigentlich für ein solches Datum minimal nötig wären. Durch zusätzliche Shiftoperationen müssen die Operandenteile danach erst wieder zusammen gesetzt werden. (Genau genommen sind bei bei n größer m auch Shiftoperationen nötig, die aber bei vorgegebener Datenbusbreite unvermeidbar sind und somit kein Data Misalignment sind.)

Das Data Alignment wird nur thematisiert, um die Zahl der Speicherzugriffe durch Automatismen bei der Anordnung von Datensätzen zu minimieren. Dass bei n = m + 1 unabhängig vom Data Alignment immer 2 Speicherzugriffe nötig sind, zeigt die Grenzen der eingangs aufgestellten Regeln. Beim schon mehrfach benutzten Beispiel des 5 Byte Datum könnte zunächst bei 4 Byte Datenbusbreite korrektes Data Alignment als überflüssig eingestuft werden. Falls jedoch später eine Portierung auf einen doppelt so breiten Datenbus erfolgt, wird das unterlassene Data Alignment zusätzlich Aufwände fordern.

Ein weiterer Sonderfall 2n = 3m könnte, wenn er nicht mit dem vorherigen Sonderfall zusammen trifft, ein halbherziges Data Alignment zweckmäßig erscheinen lassen: Ein beispielhafte Folge von mehrmals 6 Byte Datum kann bei 4 Byte Datenbusbreite entweder gut, besser oder schlecht angeordnet werden. Gut wäre es, für das erste Datum die Regeln zum Data Alignment zu beachten und weitere Daten bündig anzuschließen. Es wären immer jeweils 2 Zugriffe nötig. Besser wäre es, eine mögliche Portierung auf einen doppelt so breiten Datenbus kritisch zu hinterfragen und ggf. gleich regelkonformes Data Alignment zu betreiben.

See also: Data Alignment, Adressierung (Datenverarbeitung), Computer, Datenbus, Datum, Speicher, Speicherzugriff, Shiftoperation