首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift是否保证类和结构中字段的存储顺序?

Swift是否保证类和结构中字段的存储顺序?
EN

Stack Overflow用户
提问于 2016-09-03 10:58:42
回答 1查看 2.1K关注 0票数 7

在C中,在结构中定义字段的顺序就是它们在内存中实例化的顺序。考虑到内存对齐,下面的结构在内存中的大小为8字节,但如果字段颠倒,则只有6字节,因为不需要任何对齐填充。

代码语言:javascript
复制
struct s {
    int32_t a;
    /* 2 bytes of padding to align a 64 bit integer */
    int64_t b;
}

这种排序保证存在于C结构、C++类(和结构)和Objective-C类中。

对于Swift类和结构中的字段,存储顺序是否也有类似的保证?或者(假设该语言不支持与所列其他语言相同的指针),编译器会在编译时为您重新安排它们吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-03 11:05:01

看来订单是有保证的。

给定以下结构:

代码语言:javascript
复制
struct s {
    var a: UInt32
    var c: UInt8
    var b: UInt64
}

sizeof(s) // 16

对齐仍在进行中。在cb之间有一个丢失的8位。

当然,目前还不清楚这些比特实际上是在cb之间,还是只是在末尾添加了……在我们重新安排之前:

代码语言:javascript
复制
struct s {
    var a: UInt32
    var b: UInt64
    var c: UInt8
}

sizeof(s) // 17

我相信这个行为与你在问题中提到的其他语言相匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39302834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档