Condividi tramite


pack

Specifica l'allineamento di compressione per una struttura, un'unione e i membri della classe.

#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n  )

Note

pack fornisce controllare a livello di dati-dichiarazione.Ciò si differenzia dall'opzione del compilatore /Zp, che fornisce solo il controllo a livello di modulo.pack viene applicato al primo struct, union, o class la dichiarazione dopo il pragma è la visualizzazione.pack non ha effetto sulle definizioni.chiamare pack senza set di argomenti n il set di valori nell'opzione del compilatore /Zp.Se l'opzione del compilatore non viene impostato, il valore predefinito è 8.

Se si modifica l'allineamento di una struttura, non è possibile utilizzare più spazio in memoria, ma è possibile visualizzare una riduzione delle prestazioni o addirittura ricevere un'eccezione generata dall'hardware per l'accesso non allineato.È possibile modificare questo comportamento di eccezione tramite SetErrorMode.

  • show(facoltativo)
    Visualizzare il valore corrente di byte per l'allineamento di imballaggio.Il valore visualizzato da un messaggio di avviso.

  • push(facoltativo)
    Inserisce il valore corrente di allineamento di compressione sullo stack interno del compilatore e imposta il valore corrente di allineamento di compressione a n.se n non viene specificato, il valore corrente di allineamento di compressione viene inserito.

  • pop(facoltativo)
    Rimuove il record dall'inizio dello stack interno del compilatore.se n non viene specificato con pop, quindi il valore di compressione associato al record risultante in cima allo stack è il nuovo valore di allineamento di compressione.se n viene specificato, ad esempio, #pragma pack(pop, 16), n diventa il nuovo valore di allineamento di compressione.Se si estrae con identifier, ad esempio, #pragma pack(pop, r1), quindi tutti i record dello stack sono prelievo fino al record che ha identifier viene trovato.Che il record viene prelevato e il valore di compressione associato al record risultante nella parte superiore dello stack il nuovo valore di allineamento di compressione.Se si estrae con identifier ciò non viene trovato in alcun record nello stack, quindi pop viene ignorato.

  • identifier(facoltativo)
    una volta utilizzato con push, assegna un nome al record nello stack interno del compilatore.una volta utilizzato con pop, gli schiocchi registra dallo stack interno fino a identifier viene rimosso, se identifier non viene trovato nello stack interno, non viene estratto.

  • n (facoltativo)
    Specifica il valore, in byte, per essere utilizzato per comprimere.Se l'opzione del compilatore /Zp non è impostato per il modulo, il valore predefinito per n è 8.I valori validi sono 1, 2, 4, 8 e 16.L'allineamento di un membro sarà su un limite di cui è un join multiplo n o un multiplo delle dimensioni del membro, a seconda di quale sia più piccolo.

#pragma pack(pop,identifier,n) è definito.

Per ulteriori informazioni su come modificare l'allineamento, vedere gli argomenti seguenti:

Esempio

Di seguito viene illustrato come utilizzare pack pragma per modificare l'allineamento di una struttura.

// pragma_directives_pack.cpp
#include <stddef.h>
#include <stdio.h>

struct S {
   int i;   // size 4
   short j;   // size 2
   double k;   // size 8
};

#pragma pack(2)
struct T {
   int i;
   short j;
   double k;
};

int main() {
   printf("%d ", offsetof(S, i));
   printf("%d ", offsetof(S, j));
   printf("%d\n", offsetof(S, k));

   printf("%d ", offsetof(T, i));
   printf("%d ", offsetof(T, j));
   printf("%d\n", offsetof(T, k));
}

0 4 8
0 4 6

Di seguito viene illustrato come utilizzare push, pope show sintassi.

// pragma_directives_pack_2.cpp
// compile with: /W1 /c
#pragma pack()   // n defaults to 8; equivalent to /Zp8
#pragma pack(show)   // C4810
#pragma pack(4)   // n = 4
#pragma pack(show)   // C4810
#pragma pack(push, r1, 16)   // n = 16, pushed to stack
#pragma pack(show)   // C4810
#pragma pack(pop, r1, 2)   // n = 2 , stack popped
#pragma pack(show)   // C4810

Vedere anche

Riferimenti

Direttive pragma e la parola chiave di __Pragma