Data structure alignment is the way data is arranged and accessed in computer memory. It consists of two separate but related issues: data alignment and data structure padding. When a modern computer reads from or writes to a memory address, it will do this in word sized chunks (e.g. 4 byte chunks on a 32-bit system). Data alignment means putting the data at a memory offset equal to some multiple of the word size, which increases the system's performance due to the way the CPU handles memory.

PropertyValue
dbpprop:abstract
  • Data structure alignment is the way data is arranged and accessed in computer memory. It consists of two separate but related issues: data alignment and data structure padding. When a modern computer reads from or writes to a memory address, it will do this in word sized chunks (e.g. 4 byte chunks on a 32-bit system). Data alignment means putting the data at a memory offset equal to some multiple of the word size, which increases the system's performance due to the way the CPU handles memory. To align the data, it may be necessary to insert some meaningless bytes between the end of the last data structure and the start of the next, which is data structure padding. For example, when the computer's word size is 4 bytes, the data to be read should be at a memory offset which is some multiple of 4. When this is not the case, e.g. the data starts at the 14th byte instead of the 16th byte, then the computer has to read two 4-byte chunks and do some calculation before the requested data has been read, or it may generate an alignment fault. Even though the previous data structure ends at the 14th byte, the next data structure should start at the 16th byte. Two padding bytes are inserted between the two data structures to align the next data structure to the 16th byte. Although data structure alignment is a fundamental issue for all modern computers, many computer languages and computer language implementations handle data alignment automatically. Certain C and C++ implementations and assembly language allow at least partial control of data structure padding, which may be useful in certain special circumstances.
  • In der Rechnerarchitektur bezeichnet man ein Datenelement (oder einen Operanden) mit n Bytes als im Speicher ausgerichtet (engl. Data Alignment), wenn dessen Adresse A ein ganzzahliges Vielfaches von n ist (A mod n = 0). Falls n jedoch keine Potenz von 2 ist, muss für die Berechnung n auf die nächsthöhere Potenz von 2 aufgerundet werden. Beispiel: Ein 5-Byte-Datenelement muss entsprechend einem 8-Byte-Datenelement ausgerichtet werden. Ist die Adresse eines Mehrbyte-Datenelements kein derartiges Vielfaches, so ist es nicht ausgerichtet (engl. Data Misalignment). Ein 1-Byte-Datenelement ist immer ausgerichtet. Typischerweise erfolgt eine byteweise Adressierung des Arbeitsspeichers, 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 der Speicherausrichtung besteht darin, dass ggf. der Speicher nicht lückenlos genutzt werden kann. Bei obigem Beispiel des 5-Byte-Datenelements bleiben drei Achtel des Speichers ungenutzt. Sind die Operanden im Speicher nicht ausgerichtet, so ist eine lückenlose Nutzung des Speichers auch 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 Datenelement minimal nötig wären. Durch zusätzliche Shiftoperationen müssen die Operandenteile danach erst wieder zusammengesetzt werden. (Genau genommen sind bei n größer m auch Shift-Operationen nötig, die aber bei vorgegebener Datenbusbreite unvermeidlich sind und somit kein "data misalignment" sind. ) Je nach benutzter Prozessorarchitektur wird ein Zugriff auf nicht ausgerichtete Daten hardwareseitig gar nicht unterstützt. In diesem Falle müsste eine spezielle Programmroutine, welche die Daten softwareseitig zusammensetzt, implementiert und für jeden Zugriff ausgeführt werden. Der Mehraufwand geht weit über bloße zusätzliche Speicherzugriffe hinaus. Die Speicherausrichtung wird nur thematisiert, um die Zahl der Speicherzugriffe durch Automatismen bei der Anordnung von Datenelementen zu minimieren. Dass bei n = m + 1 unabhängig von der Speicherausrichtung immer zwei Speicherzugriffe nötig sind, zeigt die Grenzen der eingangs aufgestellten Regeln. Beim schon mehrfach benutzten Beispiel des 5-Byte-Datenelements könnte zunächst bei 4 Byte Datenbusbreite eine korrekte Speicherausrichtung als überflüssig eingestuft werden. Falls jedoch später eine Portierung auf einen doppelt so breiten Datenbus erfolgt, wird die unterlassene Speicherausrichtung zusätzlich Aufwände fordern. Ein weiterer Sonderfall 2n = 3m könnte, wenn er nicht mit dem vorherigen Sonderfall zusammentrifft, eine halbherzige Speicherausrichtung zweckmäßig erscheinen lassen: Eine beispielhafte Folge von mehreren 6-Byte-Datenelementen kann bei 4 Byte Datenbusbreite entweder gut, besser oder schlecht ausgerichtet werden. Gut wäre es, für das erste Datenelement die Regeln zur Speicherausrichtung zu beachten und weitere Datenelemente bündig anzuschließen. Es wären immer jeweils zwei Zugriffe nötig. Besser wäre es, eine mögliche Portierung auf einen doppelt so breiten Datenbus kritisch zu hinterfragen und ggf. gleich eine regelkonforme Speicherausrichtung zu betreiben.
  • L'Alignement de données est la façon dont les données sont organisées en mémoire. En effet, en informatique, les compilateurs sont souvent obligés, pour des raisons de performance et pour faciliter l'exécution du code d'aligner les données en mémoire. Un type de donnée de taille n doit être placé à une adresse multiple de n. La taille d'une structure est multiple de la taille du registre du processeur (32 bits le plus souvent).
  • Выравнивание данных в оперативной памяти компьютеров — способ размещения данных в памяти особым образом для ускорения доступа.
dbpprop:hasPhotoCollection
dbpprop:reference
rdf:type
rdfs:comment
  • Data structure alignment is the way data is arranged and accessed in computer memory. It consists of two separate but related issues: data alignment and data structure padding. When a modern computer reads from or writes to a memory address, it will do this in word sized chunks (e.g. 4 byte chunks on a 32-bit system). Data alignment means putting the data at a memory offset equal to some multiple of the word size, which increases the system's performance due to the way the CPU handles memory.
  • In der Rechnerarchitektur bezeichnet man ein Datenelement (oder einen Operanden) mit n Bytes als im Speicher ausgerichtet (engl. Data Alignment), wenn dessen Adresse A ein ganzzahliges Vielfaches von n ist (A mod n = 0). Falls n jedoch keine Potenz von 2 ist, muss für die Berechnung n auf die nächsthöhere Potenz von 2 aufgerundet werden. Beispiel: Ein 5-Byte-Datenelement muss entsprechend einem 8-Byte-Datenelement ausgerichtet werden.
  • L'Alignement de données est la façon dont les données sont organisées en mémoire. En effet, en informatique, les compilateurs sont souvent obligés, pour des raisons de performance et pour faciliter l'exécution du code d'aligner les données en mémoire. Un type de donnée de taille n doit être placé à une adresse multiple de n. La taille d'une structure est multiple de la taille du registre du processeur (32 bits le plus souvent).
  • Выравнивание данных в оперативной памяти компьютеров — способ размещения данных в памяти особым образом для ускорения доступа.
rdfs:label
  • Data structure alignment
  • Speicherausrichtung
  • Alignement de données
  • Выравнивание данных
owl:sameAs
skos:subject
foaf:page
is dbpprop:disambiguates of
is dbpprop:redirect of
is owl:sameAs of