C结构对齐

时间:2015-01-06 19:01:04

标签: c struct alignment

是否有一些gcc可移植的pragma,所以我可以将C struct 而不是作为内存对齐?

我希望我的程序可以移植(Linux,FreeBSD,MacOS,Cygwin),但我会继续使用gcc。

1 个答案:

答案 0 :(得分:4)

如果您不想对齐结构的成员(成员之间没有任何填充),使用gcc您可以使用packed属性:

struct bla
{
    int x;
    char y;
} __attribute__((__packed__));

或使用pack pragma

#pragma pack(1)
struct bla
{
     int x;
     char y;
};
#pragma pack()

或使用-fpack-struct选项进行编译。

您还可以使用aligned属性强制整个结构的最小对齐,但据我所知,您无法使用gcc禁用整个结构的对齐。