Agregace a sjednocení
Některé typy jako jsou pole (arrays), struktury (structs) a sjednocení (unions) mají přísnější požadavky na zarovnání, která zajišťují konzistentní agregace a sjednocení uložení a načtení dat.Zde jsou uvedeny definice pro pole (array), strukturu (struct) a sjednocení (union):
Pole
Obsahuje uspořádanou skupinu sousedních datových objektů.Každý objekt, se nazývá prvek.Všechny prvky v rámci pole (array) mají stejnou velikost a datový typ.Struktura
Obsahuje uspořádanou skupinu sousedních datových objektů.Na rozdíl od prvků pole (array), mohou mít datové objekty v rámci struktury různé datové typy a velikosti.Každý datový objekt ve struktuře se nazývá člen.Sjednocení
Objekt, který uchovává některý z řady pojmenovaných členů.Členové pojmenované sady mohou být libovolného typu.Uložiště, přidělené pro sjednocení, je shodné s uložištěm potřebným pro největšího člena zmíněného spojení navíc ale s určitými požadavkami na zarovnání.
Následující tabulka zobrazuje důrazně navrhované zarovnání pro skalární členy sjednocení a struktur.
Skalární typy |
Datové typy jazyka C |
Požadované zarovnání |
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 (jednoduchá přesnost) |
float |
Doubleword |
FP64 (dvojitá přesnost) |
double |
Quadword |
POINTER |
* |
Quadword |
__m64 |
struct __m64 |
Quadword |
__m128 |
struct __m128 |
Octaword |
Následující pravidla pro agregace zarovnání:
Zarovnání pole je stejné jako zarovnání jednoho prvku pole.
Zarovnání začátku struktury nebo sjednocení je maximem zarovnání každého jednotlivého člena.Každý člen v rámci struktury nebo sjednocení musí být umístěn na správném zarovnání podle definice v předchozí tabulce, což může v závislosti na předchozím členu vyžadovat implicitní vnitřní obalení.
Velikost struktury musí být celočíselným násobkem svého zarovnání, což může vyžadovat obalení za posledním členem.Vzhledem k tomu, že struktury a sjednocení mohou být seskupeny do polí, musí každý element pole struktury nebo sjednocení začínat a končit na předem správně stanoveném zarovnání.
Je možné zarovnat data takovým způsobem, aby byly větší než požadavky na zarovnání tak dlouho, dokud jsou zachována předchozí pravidla.
Zvláštní překladač může upravit obalování struktury z velikostních důvodů.Například /ZP (Struct členské zarovnání) umožňuje upravování obalování struktury.