【发布时间】:2012-12-04 02:41:29
【问题描述】:
我之前发布了一个关于指针转换期间对齐访问的问题here。总而言之,最好不要使用未对齐访问来实现完全可移植,因为某些架构可能会抛出异常,或者与对齐访问相比,性能可能会变得非常慢。
但是,there are cases 我想使用单字节对齐,例如,在传输网络数据期间,我不想在结构中添加额外的填充。所以通常这里做的是:
#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)
那么您可能已经知道我的问题:如果我在结构上强制执行单字节对齐,这是否意味着它不能完全可移植,因为结构成员没有对齐?如果我既想要无填充又想要可移植性怎么办?
【问题讨论】:
-
位域不可移植。
length_high、reserved和next的打包顺序绝对取决于实现,不同的编译器会以不同的方式执行。 -
哦,是的!我只是从旧代码中复制了它。现在算了吧,我会删除它以专注于问题
-
@Dietrich,还是谢谢你:)