Welcome to pickSourcecode.com Login | Register    
pickZy.com
 Home  | search  | games  | General  | C  | C++  | Java  | Php  | Networking  | Visual Basic  | VC++  | Win32  | MFC  | JavaScript  | Jobs  | JavaScript  | Post jobs
#pragma pack       Share
2009-11-20 |  codewarrier  | Viewed: 988  |    1

pack

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

pack gives control at the data-declaration level. This differs from compiler option /Zp, which only provides module-level control. pack takes effect at the first struct, union, or class declaration after the pragma is seen; pack has no effect on definitions. Calling pack with no arguments sets n to its default value. This is equivalent to compiler option /Zp8.

Note
that if you change the alignment of a structure, the structure will not
use as much space in memory, but you may see a decrease in performance
or even get a hardware-generated exception for unaligned access. It is
possible to modify this exception behavior with SetErrorMode.

show (optional)

Displays the current byte value for packing alignment. The value is displayed by means of a warning message.

push (optional)

Puts a specified packing alignment value, n, on the internal compiler stack, and sets the current packing alignment value to n. If n is not specified, the current packing alignment value is pushed.

pop (optional)

Removes the record from the top of the internal compiler stack. If n is not specified with pop, then the packing value associated with the resulting record on the top of the stack is the new packing alignment value. If n is specified, for example, #pragma pack(pop, 16), n becomes the new packing alignment value. If you pop with identifier, for example, #pragma pack(pop, r1), then all records on the stack are popped until the record with identifier
is found, and that record is popped and the packing value associated
with the resulting record on the top of is the stack the new packing
alignment value. If you pop with an identifier that is not found in any record on the stack, then the pop is ignored.

identifier (optional)

When used with push, assigns a name to the record on the internal compiler stack. When used with pop, pops records off the internal stack until identifier is removed; if identifier is not found on the internal stack, nothing is popped.

n(optional)

Specifies the value, in bytes, to be used for packing. The default value for n is 8. Valid values are 1, 2, 4, 8, and 16. The alignment of a member will be on a boundary that is either a multiple of n or a multiple of the size of the member, whichever is smaller.

n can be used with push or pop for setting a particular stack value, or alone for setting the current value used by the compiler.

#pragma pack(pop, identifier, n) is undefined)

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

T tt;
printf("%d ", offsetof(T, i));
printf("%d ", offsetof(T, j));
printf("%d\n", offsetof(T, k));
}
Output
:
0 4 8
0 4 6

The following sample shows how to use the push, pop, and show syntax.

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


Latest topics
C - Arrays of structures  Viewed: 285
tcpdump by host name or ip  Viewed: 291
C - structures and functions  Viewed: 292
C - For loop statements  Viewed: 295
C - pointers and Arrays  Viewed: 295
C - File Access  Viewed: 295
C - pointers to pointers  Viewed: 296
C - Register variables  Viewed: 297
C - Static variables  Viewed: 298
C - Pass-by-reference parameters  Viewed: 299

Comments:





Submit comment's

Type:

User Comment's:

Submitted By:
Prof: Software Engineer
Tech: C ,Cpp
Send Mail: ratheesh



Related topics
C - Functions and program structure, Programmed pass-by-reference via pointers, Pass-by-reference parameters
C - Pass-by-reference parameters
C - pass-by-reference via pointers

Related References
c - swap num, pass-by-reference parameters
c - pass-by-reference via pointers

Web site contents © Copyright 2007, All rights reserved.
Help | Terms and Conditions | Privacy Policy | About Us