在C中,在结构中定义字段的顺序就是它们在内存中实例化的顺序。考虑到内存对齐,下面的结构在内存中的大小为8字节,但如果字段颠倒,则只有6字节,因为不需要任何对齐填充。
struct s {
int32_t a;
/* 2 bytes of padding to align a 64 bit integer */
int64_t b;
}
这种排序保证存在于C结构、C++类(和结构)和Objective-C类中。
对于Swift类和结构中的字段,存储顺序是否也有类似的保证?或者(假设该语言不支持与所列其他语言相同的指针),编译器会在编译时为您重新安排它们吗?
发布于 2016-09-03 11:05:01
看来订单是有保证的。
给定以下结构:
struct s {
var a: UInt32
var c: UInt8
var b: UInt64
}
sizeof(s) // 16
对齐仍在进行中。在c
和b
之间有一个丢失的8位。
当然,目前还不清楚这些比特实际上是在c
和b
之间,还是只是在末尾添加了……在我们重新安排之前:
struct s {
var a: UInt32
var b: UInt64
var c: UInt8
}
sizeof(s) // 17
我相信这个行为与你在问题中提到的其他语言相匹配。
https://stackoverflow.com/questions/39302834
复制相似问题