Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

pack

Spécifie l'alignement de compression de structure, union et les membres de la classe.

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

packdonne le contrôle au niveau de la déclaration de données. Cela est différent de l'option de compilateur /Zp, qui fournit uniquement un contrôle au niveau du module. packprend effet à la première struct, union, ou classdéclaration après le pragma est visible. packn'a aucun effet sur les définitions. L'appel de packsans arguments définit nà la valeur définie dans l'option de compilateur /Zp. Si l'option du compilateur n'est pas définie, la valeur par défaut est 8.

Si vous modifiez l'alignement d'une structure, il ne peut pas utiliser que la quantité d'espace en mémoire, mais vous peut voir une diminution des performances ou même d'obtenir une exception généré par le matériel pour un accès non aligné. Vous pouvez modifier ce comportement d'exception à l'aide de SetErrorMode.

show(facultatif)

Affiche la valeur d'octet actuelle pour alignement de livraison. La valeur est affichée par un message d'avertissement.

push(facultatif)

Valeur de l'alignement de compression actuel push dans la pile de compilateurs interne, valeur de l'alignement de compression actuel n. Si nn'est pas spécifié, en cours de livraison valeur d'alignement sont poussé.

pop(facultatif)

Supprime l'enregistrement à partir du haut de la pile interne du compilateur. Si nn'est pas spécifié avec pop, la valeur de livraison associée à l'enregistrement qui en résulte en haut de la pile est la nouvelle valeur d'alignement d'emballage. Si nest spécifié, par exemple, #pragma pack(pop, 16), ndevient la nouvelle valeur d'alignement d'emballage. Si vous le pop avec identifier, par exemple, #pragma pack(pop, r1), puis tous les enregistrements de la pile sont dépilés jusqu'à l'enregistrement qui a identifiertrouve. Qu'enregistrement est extrait (pop) et la valeur de livraison associée à l'enregistrement qui en résulte en haut de la pile de la nouvelle livraison valeur d'alignement. Si vous afficher avec un identifierqui n'est pas trouvée dans aucun enregistrement sur la pile, puis le popest ignorée.

identifier(facultatif)

Lorsqu'il est utilisé avec push, attribue un nom à l'enregistrement sur la pile du compilateur interne. Lorsqu'il est utilisé avec pop, exécute un POP de la pile interne jusqu'à ce que les enregistrements identifierest supprimée ; Si identifiern'est pas trouvé sur la pile interne, rien n'est dépilé.

n (optional)

Spécifie la valeur, en octets, à être utilisés pour l'emballage. Si l'option de compilateur /Zp n'est pas défini pour le module, la valeur par défaut n8. Les valeurs valides sont 1, 2, 4, 8 et 16. L'alignement d'un membre sera sur une limite qui est un multiple de nou un multiple de la taille du membre, plus faible l'emportant.

#pragma pack(pop, identifier , n ) n'est pas défini.

Pour plus d'informations sur la façon de modifier l'alignement, consultez les rubriques suivantes :

L'exemple suivant montre comment utiliser le packpour modifier l'alignement d'une structure de pragma.

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

L'exemple suivant montre comment utiliser le push, pop, et showsyntaxe.

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

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft