2011-06-15 2 views

Répondre

3

explication de Microsoft:

http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx

explication AIX xlC IBM:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Frnpgpack.htm

Fondamentalement, il détermine les limites d'octets qui seront utilisés lors du stockage d'une structure ou d'une union. Le push/pop agit comme un moyen de stocker et de récupérer ces paramètres sur une pile.

Pour référence future, vous pourriez gagner du temps en recherchant les mots-clés que vous demandez sur le Web. Tout ce que j'ai fait pour trouver cette information était la recherche de "pragma pack" à http://www.google.com

+0

Merci pour votre réponse. Ai-je besoin d'emballage si je cours le serveur sur la machine de Linux? – codereviewanskquestions

+0

@LCYSoft: voir [réponse de Gilad Naors] (http://stackoverflow.com/questions/6353054/what-is-pragma-pack-for-in-network-progamming/6353230#6353230). Ceci est spécifique à Microsoft. – Default

1

C'est le spécificateur d'emballage spécifique à MSVC++. Vous pouvez savoir exactement ce qu'il fait de the documentation.

La compression modifie la quantité de remplissage que le compilateur est autorisé à insérer entre les membres de données d'une structure (ou classe) donnée pour maintenir l'alignement. Dans le cas du code réseau, le spécificateur #pragma pack est probablement utilisé de sorte qu'une structure peut être convertie en char* ou void* pour être transmise à une API réseau, pour envoyer la structure entière sur le réseau à la fois.

(Notez que c'est dangereux que les différentes machines ont des règles différentes pour l'alignement et l'ordre des octets, ce qui ne fonctionnera que si les deux machines à chaque extrémité du fil utilisent le même type de matériel)

2

Tous les instructions #pragma sont spécifiques au vendeur.

Celui-ci est spécifique à Microsoft, et décrit combien "d'emballage" (en octets) le compilateur peut ajouter à struct s pour un meilleur alignement.

Le #pragma pack(push) enregistre simplement le réglage précédent dans une pile. Vous pouvez ensuite modifier les conditions d'emballage pour un certain bloc de code, et plus tard #pragma pack(pop) pour restaurer les paramètres précédents.