Freigeben über


Aggregate und Unions

Andere Typen wie Arrays, Strukturen und Unions erfordern eine strengere Ausrichtung, um die Konsistenz von Speicher und Datenabruf bei Aggregaten und Unions zu gewährleisten. Im Folgenden die Definitionen für Array, Struktur und Union:

  • Array
    Enthält eine geordnete Gruppe benachbarter Datenobjekte. Die einzelnen Objekte werden als Elemente bezeichnet. Alle Elemente innerhalb eines Arrays besitzen dieselbe Größe und denselben Datentyp.

  • Struktur
    Enthält eine geordnete Gruppe von Datenobjekten. Im Gegensatz zu den Elementen eines Arrays können die Datenobjekte einer Struktur unterschiedliche Datentypen und Größen besitzen. Die einzelnen Datenobjekte in einer Struktur werden als Member bezeichnet.

  • Union
    Ein Objekt, das einen beliebigen Member aus einem Satz benannter Member enthält. Die Member des benannten Satzes können beliebigen Typs sein. Der einer Union zugewiesene Speicher entspricht dem für den größten Member der Union erforderlichen Speicher, ggf. plus Leerspeicher zur Ausrichtung.

In der folgenden Tabelle wird die empfohlene Ausrichtung für die skalaren Member von Unions und Strukturen angezeigt.

Skalartyp

C-Datentyp

Erforderliche Ausrichtung

INT8

char

Byte

UINT8

unsigned char

Byte

INT16

short

Word

UINT16

unsigned short

Word

INT32

int, long

Doubleword

UINT32

unsigned int, unsigned long

Doubleword

INT64

__int64

Quadword

UINT64

unsigned __int64

Quadword

FP32 (einfache Genauigkeit)

float

Doubleword

FP64 (doppelte Genauigkeit)

double

Quadword

POINTER

*

Quadword

__m64

struct __m64

Quadword

__m128

struct __m128

Octaword

Es gelten folgende Aggregatausrichtungsregeln:

  • Die Ausrichtung eines Arrays entspricht der Ausrichtung eines der Array-Elemente.

  • Die Ausrichtung des Anfangs einer Struktur oder einer Union ist die maximale Ausrichtung eines einzelnen Member. Jeder Member innerhalb der Struktur oder Union muss korrekt ausgerichtet werden, wie in der vorhergehenden Tabelle definiert. Dabei kann abhängig vom vorhergehenden Member ein implizites internes Auffüllen erforderlich sein.

  • Die Größe der Struktur muss ein ganzzahliges Vielfaches seiner Ausrichtung sein, sodass möglicherweise ein Auffüllen nach dem letzten Member erforderlich ist. Da Strukturen und Unions in Arrays gruppiert werden können, muss jedes Array-Element einer Struktur oder Union an der zuvor bestimmten korrekten Ausrichtung beginnen und enden.

  • Daten können auf eine solche Weise ausgerichtet werden, dass sie größer als die Ausrichtungsanforderungen sind, solange die oben genannten Regeln eingehalten werden.

  • Ein bestimmter Compiler kann de Komprimierung einer Struktur aus Gründen der Größe anpassen. Beispielsweise erlaubt /Zp (Ausrichten des Strukturmembers) das Anpassen der Komprimierung von Strukturen.

Siehe auch

Referenz

Typen und Speicher