【发布时间】:2015-07-02 21:03:31
【问题描述】:
我想知道是否有办法强制填充 C 结构的字段。 我将尝试用一个例子更好地解释它: 如果我有以下结构:
struct foo{
int32 a,
int16 b,
int8 c,
int32 d,
int32 e
};
我会按以下方式映射它(考虑0x00作为起始地址:
&foo.a = 0x00
&foo.b = 0x08
&foo.c = 0x0A
&foo.d = 0x10
&foo.e = 0x18
以便将字段打包成 4 个字节,每个 8 个字节。
我显然知道我可以插入“填充字段”,但这是唯一的解决方案吗?
【问题讨论】:
-
哪个编译器?对于 GCC,请参阅 here 以获取
aligned属性 -
出于什么目的?您可以使用多个属性来控制 gcc 中的对齐和填充,但如果您不注意自己在做什么,您很容易迫使 gcc 生成令人讨厌的缓慢和无效的代码。 gcc 通常会为平台本身做正确的事情,除非您正在做一些非常特别的事情。
-
是的,gcc 没问题。无论如何,平台是一个定制的微。
-
Olgac,aligned 属性工作得很好,谢谢。无论如何,似乎没有办法对结构内的数组使用相同的对齐方式。即 int16 a[4]: &a[0] = 0x00, &a[1]=0x02, &a[2]=0x08, &a[3]=0x0A..
-
C11 有
_Alignas说明符