Aggregati e unioni
Aggiornamento: novembre 2007
Per altri tipi, ad esempio matrici, strutture e unioni, sono definiti requisiti di allineamento più rigorosi che assicurano la coerenza delle operazioni di archiviazione e recupero dati per aggregati e unioni. Di seguito sono riportate le definizioni di matrice, struttura e unione:
Matrice
Contiene un gruppo ordinato di oggetti dati adiacenti. Ciascun oggetto è denominato elemento. Tutti gli elementi all'interno di una matrice hanno la stessa dimensione e lo stesso tipo di dati.Struttura
Contiene un gruppo ordinato di oggetti dati. A differenza degli elementi di una matrice, gli oggetti dati all'interno di una struttura possono avere dimensione e tipo di dati differenti. Ciascun oggetto dati in una struttura è denominato membro.Unione
Oggetto contenente un qualsiasi insieme di membri denominati. I membri dell'insieme possono essere di qualsiasi tipo. Lo spazio di archiviazione allocato per un'unione è uguale allo spazio di archiviazione necessario per il membro più grande di tale unione, più l'eventuale spaziatura interna richiesta per l'allineamento.
Nella tabella riportata di seguito è indicato l'allineamento consigliato per i membri scalari di unioni e strutture.
Tipo scalare |
Tipo di dati di C |
Allineamento consigliato |
INT8 |
char |
Byte |
UINT8 |
unsigned char |
Byte |
INT16 |
short |
Word |
UINT16 |
unsigned short |
Word |
INT32 |
int, long |
Double word |
UINT32 |
unsigned int, unsigned long |
Double word |
INT64 |
__int64 |
Quad word |
UINT64 |
unsigned __int64 |
Quad word |
FP32 (precisione singola) |
float |
Double word |
FP64 (precisione doppia) |
double |
Quad word |
POINTER |
* |
Quad word |
__m64 |
struct __m64 |
Quad word |
__m128 |
struct __m128 |
Octa word |
Di seguito sono riportate le regole di allineamento valide per gli aggregati:
L'allineamento di una matrice è uguale all'allineamento di uno degli elementi della matrice.
L'allineamento dell'inizio di una struttura o di un'unione corrisponde all'allineamento massimo di un qualsiasi membro. Ciascun membro all'interno della struttura o dell'unione deve essere posizionato con il relativo allineamento corretto, come definito nella tabella precedente. Questa condizione può richiedere l'inserimento di una spaziatura interna implicita, a seconda del membro precedente.
La dimensione di una struttura deve essere un multiplo integrale del relativo allineamento. Questa condizione può richiedere l'inserimento di una spaziatura dopo l'ultimo membro. Poiché le strutture e le unioni possono essere raggruppate in matrici, ciascun elemento della matrice di una struttura o un'unione deve iniziare e terminare con l'allineamento corretto indicato precedentemente.
È possibile allineare i dati in modo da utilizzare un valore maggiore rispetto ai requisiti di allineamento, purché siano rispettate le regole indicate sopra.
Un singolo compilatore può regolare il livello di compressione di una struttura per motivi di ridimensionamento. Ad esempio, /Zp (Allineamento membri struttura) consente la regolazione della compressione delle strutture.