Archiviazione e allineamento di struttureStorage and Alignment of Structures

Sezione specifica MicrosoftMicrosoft Specific

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.Structure members are stored sequentially in the order in which they are declared: the first member has the lowest memory address and the last member the highest.

Ogni oggetto dati ha un alignment-requirement.Every data object has an alignment-requirement. Per le strutture, il requisito è il più elevato dei relativi membri.For structures, the requirement is the largest of its members. A ogni oggetto viene allocato un offset affinchéEvery object is allocated an offset so that

offset % alignment-requirement == 0offset % 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.Adjacent bit fields are packed into the same 1-, 2-, or 4-byte allocation unit if the integral types are the same size and if the next bit field fits into the current allocation unit without crossing the boundary imposed by the common alignment requirements of the bit fields.

Per risparmiare spazio o per rispettare la conformità alle strutture di dati esistenti, è consigliabile archiviare le strutture in modo più o meno compatto.To conserve space or to conform to existing data structures, you may want to store structures more or less compactly. L'opzione del compilatore /Zp[n] e #pragma pack controllano il modo in cui i dati della struttura vengono "compressi" in memoria.The /Zp[n] compiler option and the #pragma pack control how structure data is "packed" into memory. 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.When you use the /Zp[n] option, where n is 1, 2, 4, 8, or 16, each structure member after the first is stored on byte boundaries that are either the alignment requirement of the field or the packing size (n), whichever is smaller. Espressi sotto forma di formula, i limiti dei byte sonoExpressed as a formula, the byte boundaries are the

min( n, sizeof( item ) )  

dove n è la dimensione di compressione espressa con l'opzione /Zp[n] e item è il membro di struttura.where n is the packing size expressed with the /Zp[n] option and item is the structure member. La dimensione di compressione predefinita è /Zp8.The default packing size is /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.To use the pack pragma to specify packing other than the packing specified on the command line for a particular structure, give the pack pragma, where the packing size is 1, 2, 4, 8, or 16, before the structure. Per ripristinare la compressione fornita nella riga di comando, specificare il pragma pack senza argomenti.To reinstate the packing given on the command line, specify the pack pragma with no arguments.

Per impostazione predefinita, con il compilatore C Microsoft i campi di bit vengono impostati sulla dimensione long.Bit fields default to size long for the Microsoft C compiler. 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.Structure members are aligned on the size of the type or the /Zp[n] size, whichever is smaller. La dimensione predefinita è 4.The default size is 4.

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Dichiarazioni di strutturaStructure Declarations