如何对齐结构的元素?

时间:2010-03-26 00:30:11

标签: c struct alignment

有没有办法强制使用GNUism对结构的特定元素进行对齐?

4 个答案:

答案 0 :(得分:3)

尝试6.54.8 Structure-Packing Pragmas

  

与Microsoft兼容   Windows编译器,GCC支持一套   #pragma指令改变了   最大对齐成员   结构(零宽度除外)   比特场,工会和班级   随后定义。 n值   以下总是要求小   两个权力并指定新的   以字节为单位的对齐。

     
      
  1. #pragma pack(n)只需设置新的对齐方式。
  2.   
  3. #pragma pack()将对齐设置为其中的对齐方式   编译开始时的效果(见   也是命令行选项   -fpack-struct[=<n>]请参阅Code Gen Options)。
  4.   
  5. #pragma pack(push[,n])按下当前对齐设置   内部堆栈然后可选   设置新的路线。
  6.   
  7. #pragma pack(pop)将对齐设置恢复为保存的设置   内部堆栈的顶部(和   删除该堆栈条目)。注意   #pragma pack([n])不影响此内部堆栈;因此它是   可能有#pragma pack(push)   然后是多个#pragma pack(n)   实例并由单个最终确定   #pragma pack(pop)
  8.         

    某些目标,例如i386和powerpc,   支持ms_struct #pragma   根据文件列出一个结构   __attribute__ ((ms_struct))

         
        
    1. #pragma ms_struct on打开声明的结构的布局。
    2.   
    3. #pragma ms_struct off关闭声明的结构的布局。
    4.   
    5. #pragma ms_struct reset返回默认布局。
    6.   

答案 1 :(得分:3)

http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Type-Attributes.html

aligned (alignment)
This attribute specifies a minimum alignment (in bytes) for variables of the specified type. > For example, the declarations:
        struct S { short f[3]; } __attribute__ ((aligned (8)));
        typedef int more_aligned_int __attribute__ ((aligned (8)));

答案 2 :(得分:0)

您可以尝试在结构上对齐的属性:

__attribute__((__aligned__(8)))

答案 3 :(得分:0)

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