我之前在这里发布了一个关于指针转换期间对齐访问的问题。总而言之,最好不要使用非对齐访问来实现完全可移植,因为某些架构可能会抛出异常,或者与对齐访问相比,性能可能会变得非常慢。
但是,在某些情况下,我想使用单字节对齐,例如,在传输网络数据期间,我不想在结构内添加额外的填充。所以通常这里做的是:
#pragma pack (push, 1)
struct tTelegram
{
u8 cmd;
u8 index;
u16 addr1_16;
u16 addr2_16;
u8 length_low;
u8 data[1];
};
#pragma pack (pop)
那么你可能已经知道我的问题了:如果我对我的结构强制执行单字节对齐,这是否意味着它不能完全可移植,因为结构成员没有对齐?如果我既想要没有填充又想要可移植性怎么办?