#pragma pack(n)
Posted qiyuexin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#pragma pack(n)相关的知识,希望对你有一定的参考价值。
#pragma pack(n)
Non-Confidential | ARM DUI0375E | |||
|
||||
Home > Compiler-specific Features > #pragma pack(n) |
9.91 #pragma pack(n)
This pragma aligns members of a structure to the minimum of
and their natural alignment. Packed objects are read and written using unaligned accesses.n
Note
This pragma is a GNU compiler extension that the ARM compiler supports.
Syntax
#pragma pack(n
)
Where:
n
-
is the alignment in bytes, valid alignment values being
1
,2
,4
and8
.
Default
The default is
#pragma pack(8)
.Errors
Taking the address of a field in a
#pragma pack
ed struct
does not yield a __packed
pointer, so the compiler does not produce an error if you assign this address to a non-__packed
pointer. However, the field might not be properly aligned for its type, and dereferencing such an unaligned pointer results in undefined behavior.Examples
This example demonstrates how
pack(2)
aligns integer variable b
to a 2-byte boundary.typedef struct
{
char a;
int b;
} S;
#pragma pack(2)
typedef struct
{
char a;
int b;
} SP;
S var = { 0x11, 0x44444444 };
SP pvar = { 0x11, 0x44444444 };
The layout of
S
is:Figure 9-1 Nonpacked structure S
The layout of
SP
is:Figure 9-2 Packed structure
SP
Note
In this layout,
x
denotes one byte of padding.SP
is a 6-byte structure. There is no padding after
b
.以上是关于#pragma pack(n)的主要内容,如果未能解决你的问题,请参考以下文章
#pragma pack(push,1)与#pragma pack的区别(转)
高级C__attribute__((aligned(n))) 与 #pragma(pack(n))的区别
高级C__attribute__((aligned(n))) 与 #pragma(pack(n))的区别