有没有办法强制使用GNUism对结构的特定元素进行对齐?
答案 0 :(得分:3)
尝试6.54.8 Structure-Packing Pragmas
与Microsoft兼容 Windows编译器,GCC支持一套 #pragma指令改变了 最大对齐成员 结构(零宽度除外) 比特场,工会和班级 随后定义。 n值 以下总是要求小 两个权力并指定新的 以字节为单位的对齐。
#pragma pack(n)
只需设置新的对齐方式。#pragma pack()
将对齐设置为其中的对齐方式 编译开始时的效果(见 也是命令行选项-fpack-struct[=<n>]
请参阅Code Gen Options)。#pragma pack(push[,n])
按下当前对齐设置 内部堆栈然后可选 设置新的路线。- 醇>
#pragma pack(pop)
将对齐设置恢复为保存的设置 内部堆栈的顶部(和 删除该堆栈条目)。注意#pragma pack([n])
不影响此内部堆栈;因此它是 可能有#pragma pack(push)
然后是多个#pragma pack(n)
实例并由单个最终确定#pragma pack(pop)
。某些目标,例如i386和powerpc, 支持
ms_struct
#pragma
根据文件列出一个结构__attribute__ ((ms_struct))
。
#pragma ms_struct on
打开声明的结构的布局。#pragma ms_struct off
关闭声明的结构的布局。- 醇>
#pragma ms_struct reset
返回默认布局。
答案 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。 在描述填充字节应该消失的文件或网络协议中的数据布局时,这非常有用。