Agregacje i unie
Innych typów, takich jak tablice, strukturach i związki mają bardziej rygorystyczne wymagania wyrównanie, zapewniających spójny Unii i agregacji przechowywania i pobierania danych.Poniżej przedstawiono definicje dla tablicy, struktury i Unii:
Tablica
Zawiera Uporządkowana grupa obiektów sąsiednich danych.Każdy obiekt nosi nazwę elementu.Wszystkie elementy w tablicy mają ten sam typ danych i rozmiar.Struktura
Zawiera Uporządkowana grupa obiektów danych.W przeciwieństwie do elementów tablicy obiekty danych w ramach struktury mogą mieć różne typy danych i rozmiary.Każdy obiekt danych w strukturze nosi nazwę członka.Unia
Obiekt, który posiada dowolny zestaw nazwanych elementów członkowskich.Członkami nazwanego zestawu mogą być dowolnego typu.Pamięć zaalokowana na Unii jest równa obszaru pamięci wymaganego dla największych członka tej Unii, a także bajtami dopełniającymi wymaganych do wyrównania.
W poniższej tabeli przedstawiono mocno polecane wyrównania dla skalarnych członkami związków zawodowych i struktur.
Typ skalarny |
Typ danych c |
Wyrównanie wymagane |
INT8 |
char |
Bajt |
UINT8 |
unsigned char |
Bajt |
INT16 |
short |
Program Word |
UINT16 |
niepodpisany short |
Program Word |
INT32 |
int, długi |
Bitowego |
UINT32 |
unsigned int, unsigned długo |
Bitowego |
INT64 |
__int64 |
Quadword |
UINT64 |
unsigned __int64 |
Quadword |
FP32 (Pojedyncza precyzja) |
typ float |
Bitowego |
FP64 (Podwójna precyzja) |
double |
Quadword |
WSKAŹNIK |
* |
Quadword |
__m64 |
struct __m64 |
Quadword |
__m128 |
struct __m128 |
Octaword |
Obowiązują następujące reguły agregujące wyrównania:
Wyrównanie tablicy jest taka sama, jak wyrównanie jednego z elementów tablicy.
Wyrównanie początek strukturę lub związek jest maksymalna wyrównanie któregokolwiek członka indywidualnych.Każdy członek w ramach struktury lub Unii muszą być umieszczone na jego prawidłowe ustawienie, jak zdefiniowano w poprzedniej tabeli, która może wymagać niejawna dopełnienia wewnętrznego, w zależności od poprzedni element członkowski.
Rozmiar struktury musi być całkowitą wielokrotnością jej wyrównanie, które mogą wymagać wypychania po ostatnim członkiem.Ponieważ struktury i związków zawodowych mogą być grupowane w tablicach, każdemu elementowi tablicy, struktury lub związek musi rozpocząć i kończy się w prawidłowe ustawienie, które wcześniej ustalona.
Istnieje możliwość wyrównać dane w taki sposób, aby być większa niż wymagania co do wyrównania, tak długo, jak poprzednich zasad są utrzymywane.
Indywidualne kompilator może dostosować pakowania struktury ze względu na rozmiar.Na przykład /Zp (Wyrównanie członka struktury) pozwala na dopasowanie pakowania struktur.