Swift中的枚举内存布局——读书笔记

117 阅读1分钟

主要是一些读书的笔记,并加深对计算机基础知识的了解

1、简单枚举<没有关联值>的本质就是一个整型值,整型值的大小取决于该枚举所定义的类型的数量。

2、给枚举添加原始值不会影响枚举自身的任何结构,设置原始值其实是编译器帮我们添加了rawValue属性,init(rawValue)方法(RawRepresentable协议)。

3、添加关联值会影响枚举内存结构,关联值被储存在枚举变量中,枚举变量的大小取决于占用内存最大的那个类型。

4、关联值枚举: 最大字节数之和 额外 + 1 最后一个字节 存放 case 类型 非关联值枚举: 内存 占用 1个字节 内存中 以下标数 为值,依次累加。

5、当case选项过多超出256个时,比如出现300个时,会占用2个字节,由于超出2个字节需要的case太多,我没有进行测试,但应该是依次类推的。

以下是一些代码的摘要: 这个方法可以获取内存地址,配合memory read + 内存地址 可以看到字节里存放的数据

func getPoint(value: inout T) -> UnsafeRawPointer {
        return withUnsafePointer(to: &value, {UnsafeRawPointer($0)})
    }
    
参考链接

https://mp.weixin.qq.com/s/g-iu1wKAHc6PJBS8iBiSDQ

https://juejin.cn/post/6844904020029489160

https://juejin.cn/post/6844904020621033486