访问打包结构成员的正确方法是什么?
struct __attribute__ ((packed)) MyData {
char ch;
int i;
}
void g(int *x); // do something with x
void foo(MyData m) {
g(&m.i);
}
void bar(MyData m) {
int x = m.i;
g(&x);
}
我的 IDE 为 foo 提供了警告/建议,我可能正在访问未对齐的 int 指针,这确实是这种情况。我的问题是
- 在 foo 和 bar 之间,一种方法比另一种更好吗?
- 访问未对齐的指针数据是否不正确,但可以使用它来初始化正确对齐的类型?(如酒吧)。
- 我们是否应该将打包的 struct 单个成员复制到正确对齐的数据结构中,然后使用它?这意味着几乎每个打包数据结构都有一个非打包数据结构,而打包结构仍然局限于序列化层。