在C中,在结构中定义字段的顺序就是它们在内存中实例化的顺序。考虑到内存对齐,下面的结构在内存中的大小为8字节,但如果字段颠倒,则只有6字节,因为不需要任何对齐填充。s { /* 2 bytes of padding to align a 64 bit integer */}
这种排序保证存在于C结构、C++类(和结构)和Objective-C类中。对于Swift类
TL;DR:我认为Rust中的填充属性总是会剥离字段之间的任何填充,但显然这只适用于packed(1)。我希望我的结构表示内存中的确切字节,而不需要在字段之间添加任何额外的填充,但是结构也需要对齐页面。编译器输出与我在代码示例中所期望的不一样。从语言引用[]中我发现,packed(N)将结构对齐到N字节边界。我希望只有结构的开头是对齐的,而字段之间从来没有填充。,为什么字段之间有填充?0x7ffd18c12001
padding be