Condividi tramite


Archiviazione e allineamento di strutture

Sezione specifica Microsoft

I membri di struttura vengono archiviati in modo sequenziale nell'ordine in cui sono dichiarati: il primo avrà l'indirizzo di memoria più basso e l'ultimo quello più alto.

Ogni oggetto dati ha un alignment-requirement. Per le strutture, il requisito è il più elevato dei relativi membri. A ogni oggetto viene allocato un offset affinché

offset % alignment-requirement == 0

I campi di bit adiacenti vengono compressi nella stessa unità di allocazione a 1, 2 o 4 byte se i tipi integrali sono della stessa dimensione e se il campo di bit successivo rientra nell'unità di allocazione corrente senza oltrepassare il limite imposto dai requisiti di allineamento comuni dei campi di bit.

Per risparmiare spazio o per rispettare la conformità alle strutture di dati esistenti, è consigliabile archiviare le strutture in modo più o meno compatto. L'opzione del compilatore /Zp[n] e #pragma pack controllano il modo in cui i dati della struttura vengono "compressi" in memoria. Quando si utilizza l'opzione /Zp[n] (dove n è 1, 2, 4, 8 o 16), ogni membro di struttura dopo il primo viene archiviato entro i limiti di byte, ovvero in base al requisito di allineamento del campo o al requisito delle dimensioni di compressione (n), a seconda di quale dei due è inferiore. Espressi sotto forma di formula, i limiti dei byte sono

min( n, sizeof( item ) )

dove n è la dimensione di compressione espressa con l'opzione /Zp[n] e item è il membro di struttura. La dimensione di compressione predefinita è /Zp8.

Per utilizzare il pragma pack per specificare la compressione in modo diverso da quella specificata nella riga di comando per una determinata struttura, inserire il pragma pack, in cui le dimensioni di compressione sono 1, 2, 4, 8 o 16, prima della struttura. Per ripristinare la compressione fornita nella riga di comando, specificare il pragma pack senza argomenti.

Per il compilatore Microsoft C, per impostazione predefinita i campi di bit hanno dimensioni pari a 4 byte, ovvero un long tipo di dati. I membri di struttura vengono allineati in base alla dimensione del tipo o alla dimensione di /Zp[n], a seconda di quale delle due è inferiore.

Fine sezione specifica Microsoft

Vedi anche

Dichiarazioni di struttura