2010-03-26 61 views

回答

3

尝试6.54.8 Structure-Packing Pragmas

对于与Microsoft Windows编译器的兼容性,GCC支撑一组#pragma指令,其改变 结构的成员的 最大对齐(大于零宽度 位域除外) ,随后定义了工会和类别 。下面的n值 总是要求为2的幂,并指定新的 以字节为单位的对齐。

  1. #pragma pack(n)只是设置新的比对。
  2. #pragma pack()设置对齐到一个在 效果编译时开始(见 还命令行选项 -fpack-struct[=<n>]看到代码生成选项)。
  3. #pragma pack(push[,n])推动 内部堆栈上的当前对齐设置,然后可选地 设置新对齐。
  4. #pragma pack(pop)将对齐设置恢复为保存在内部堆栈顶部的 (并且 删除该堆栈条目)。请注意, #pragma pack([n])不会影响此内部堆栈;因此它是 可能有#pragma pack(push) 其次是多个#pragma pack(n) 实例和由单个 #pragma pack(pop)最终确定。

一些目标,例如, i386和powerpc, 支持ms_struct#pragma其中 奠定了结构为记录的 __attribute__ ((ms_struct))

  1. #pragma ms_struct on打开声明结构的布局。
  2. #pragma ms_struct off关闭已声明结构的布局。
  3. #pragma ms_struct reset回到默认布局。
0

您可以尝试在结构排列的属性:

__attribute__((__aligned__(8))) 
0

除了列出的东西,你也可能有兴趣在属性( (packed)),它试图在没有任何填充的情况下布置数据 - 基本上对齐设置为1. Th在描述填充字节应该消失的文件或网络协议中的数据布局时非常有用。