pack

Stores data to reduce data size instead of improving execution performance.

Syntax
#pragma pack()
  
#pragma pack(0 | 
  n  | push | pop)
  

n

One of these integer values: 1, 2, 4, 8, or 16.

Remarks

Use this pragma to align data to use less storage even if the alignment might affect program performance or does not conform to the target platform's application binary interface (ABI).

If this pragma's argument is a power of 2 from 1 to 16, the compiler will store subsequent data structures to this byte alignment.

The push argument saves this pragma's setting on a stack at compile time. The pop argument restores the previously saved setting and removes it from the stack. Using this pragma with no argument or with 0 as an argument specifies that the compiler will use ABI-conformant alignment.

Not all processors support misaligned accesses, which could cause a crash or incorrect results. Even on processors which allow misaligned access, your program's performance might be reduced. Your program may have better performance if it treats the packed structure as a byte stream, then packs and unpacks each byte from the stream.

Note: Pragma pack is implemented somewhat differently by most compiler vendors, especially when used with bitfields. If you need portability, you are probably better off using explicit shift and mask operations in your program instead of bitfields.
Related information
global_optimizer
ipa
ipa_inline_max_auto_size
ipa_not_complete
load_store_elimination
opt_common_subs
opt_dead_assignments
opt_dead_code
opt_lifetimes
opt_loop_invariants
opt_propagation
opt_strength_reduction
opt_strength_reduction_strict
opt_unroll_loops
opt_vectorize_loops
optimization_level
optimize_for_size
optimizewithasm
strictheaderchecking