我知道还有其他类似的问题.我已经通读了这些,但我认为这个问题还没有得到回答.
我是否可以使用指针算法在相同类型的 struct 的连续(在声明序列中是连续的)字段序列之间移动,而无需咨询_Alignof
?
我可以在数组元素之间移动而不需要咨询_Alignof
,因为包括了尾随填充.
然而, struct 中相同类型的连续字段是否可能与数组中的对齐方式不同?
换句话说,这段代码有可能是未定义的行为吗?
struct MyStruct {
long int field_1;
int field_2;
int field_3;
};
int main(void) {
struct MyStruct my_struct;
int *field_2_ptr = &my_struct.field_2;
int field_3_value = *(field_2_ptr + 1);
}
我认为这是一种糟糕的做法.我am意识到了->
.I know填充通常会产生干扰.我想知道填充在这种特定情况下是否会干扰.
这个问题是关于C的,我不关心C++.
到目前为止,我已经用GCC编译了这个,并try 了Valgrind,看看是否有什么不对劲,并用clang和UBSan编译了它.在这个系统(x86-64 Linux)上,它似乎很好.