有一个简单的办法,只是使用上稍嫌麻烦:把你希望对齐的宽度(一般是16位或32位),用一个哑元数据表示,并把这个数据与你希望对齐的数据本身,组成一个联合(union)。
例如你希望把字节数组对齐到16位:union {
uint16_t __dummy; // 这个哑元数据可以使编译器让整个 union 对齐到16位,
uint8_t arr[10]; // 从而保证了 arr 也是对齐的。
} aligned_arr;
访问数据时,要注意 arr 数组是联合变量 aligned_arr 的成员。 |