栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Swift中对齐与大步前进

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Swift中对齐与大步前进

这是一个简单的示例:

struct Foo {    let a: Int16    let b: Int8}print(MemoryLayout<Foo>.size)       // 3print(MemoryLayout<Foo>.alignment)  // 2print(MemoryLayout<Foo>.stride)     // 4
  • 对齐 的结构是其所有领域的最大的队列,在这种情况下,最大的
    2
    1
  • 结构的 跨度 是将大小四舍五入为对齐的大小,此处
    3
    四舍五入为的倍数
    4

跨度是内存中相同类型的连续实例之间(起点)之间的距离:

let array = [Foo(a: 1, b:2), Foo(a: 3, b: 4), Foo(a: 5, b: 6)]array.withUnsafeBytes {    print(Data($0) as NSData) // <01000234 03000474 0500066f>    print($0.count) // 12}

结构跨度是结构对齐的倍数,因此所有实例(因此所有实例字段)都已正确对齐。

详细信息可以在Type
Layout中
找到

脆弱的结构和元组布局

结构和元组当前共享相同的布局算法,在编译器实现中称为“通用”布局算法。算法如下:

  • 以0的大小和1的对齐方式开始。
  • 以元组的元素顺序或结构的var声明顺序遍历字段。对于每个字段:
    • 通过四舍五入到字段的对齐方式来更新大小,即将其增大到大于或等于大小的最小值,并且可以被字段的对齐方式整除。
    • 将字段的偏移量分配给size的当前值。
    • 通过添加字段的大小来更新大小。
    • 将对齐方式更新为最大对齐方式和字段的对齐方式。
  • 最终大小和对齐方式是聚合的大小和对齐方式。该类型的跨度是将最终大小四舍五入以对齐。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号