Compartir a través de


pack

Especifica la alineación de empaquetado de la estructura, unión, y los miembros de clase.

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

Comentarios

pack controlar en el nivel de la dato-declaración.Esto difiere de la opción del compilador /Zp, que proporciona solo el control de nivel de módulo.pack toma el efecto en primer struct, union, o la declaración de class después de pragma se considera.pack no tiene ningún efecto en definiciones.La llamada pack sin argumentos establece n al valor establecido en la opción del compilador /Zp.Si la opción del compilador no se establece, el valor predeterminado es 8.

Si cambia la adaptación de una estructura, no puede utilizar tanto espacio en memoria, pero puede ver una disminución del rendimiento o incluso obtener una excepción generado por componentes físicos para el acceso sin alinear.Puede modificar este comportamiento de excepción mediante SetErrorMode.

  • show(opcional)
    Muestra el valor actual de bytes para empaquetar la alineación.El valor se muestra mediante un mensaje de advertencia.

  • push(opcional)
    Inserta el valor actual de la alineación de empaquetado en la pila interna del compilador, y establece el valor actual de la alineación de empaquetado a n.Si n no se especifica, se inserta el valor actual de la alineación de empaquetado.

  • pop(opcional)
    Quita el registro desde la parte superior de la pila interna del compilador.Si n no se especifica con pop, el valor de empaquetado asociado al registro resultante en la parte superior de la pila es el nuevo valor de la alineación de empaquetado.Si se especifica n , por ejemplo, #pragma pack(pop, 16), n se convierte en el nuevo valor de la alineación de empaquetado.Si saca con identifier, por ejemplo, #pragma pack(pop, r1), después todos los registros de la pila se saca hasta el registro se encuentra que tiene identifier .Que el registro se sacado y el valor de empaquetado asociado al registro resultante en la parte superior de es la pila el nuevo valor de la alineación de empaquetado.Si saca con identifier que no se encuentra en ningún registro en la pila, se omite pop .

  • identifier(opcional)
    Cuando se utiliza con push, asigna un nombre al registro en la pila interna del compilador.Cuando se usa con pop, los estallidos registran de pila interna hasta que se quite identifier ; si identifier no se encuentra en la pila interna, no se extrae nada.

  • n (opcional)
    Especifica el valor, en bytes, para utilizar para empaquetar.Si la opción del compilador /Zp no está establecido para el módulo, el valor predeterminado de n es 8.Los valores válidos son 1, 2, 4, 8 y 16.La alineación de un miembro estará en un límite que es un múltiplo de n o un múltiplo del tamaño del miembro, lo que sea menor.

#pragma pack(pop,identifier,n) es indefinido.

Para obtener más información sobre cómo modificar la alineación, vea estos temas:

Ejemplo

El ejemplo siguiente se muestra cómo utilizar la directiva pragma de pack para cambiar la alineación de una estructura.

// 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

El ejemplo siguiente se muestra cómo utilizar push, pop, y la sintaxis de show .

// 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

Vea también

Referencia

Directivas de pragma y la palabra clave de __Pragma