Int占用多少个字节?
实际上跟平台有关,Int64 平台 == 8字节
1.1求类型占用多少内存
MemoryLayout<Int>.size == 8 // 实际用到的空间大小
MemoryLayout<Int>.stride == 8 // 分配占用的空间大小
MemoryLayout<Int>.aligment == 8 内存对齐,对齐参数:8的倍数
1.2求变量的内存占用多少字节?
var age = 10
MemoryLayout.size(ofValue: age) == 8
MemoryLayout.stride(ofValue: age) == 8
MemoryLayout.aligment(ofValue: age) == 8
Swift枚举中:原始值和关联值变量所占内存是很大区别的
原始值 所占用内存是1
enum Season: Int {
case spring = 1, summer, autumn, winter
}
因为原始值是不可变的,底层实现类似 0, 1, 2, 3,它的原始值并不存储在枚举变量中,我们使用原始值,Season.spring.rawValue 这个rawValue类似一个方法,从方法中获取这个原始值.
关联值 所占用总内存是40
enum Password {
case number(Int, Int, Int, Int) // 32
case other // 1
}
var pwd1 = Password.number(111,222,3333,99999)
var pwd2 = Password.other
因为关联值是可变的,必须保证足够的内存空间存储,本来32个字节就可以了,为什么要40个字节呢?因为要区分变量是pwd1还是pwd2,因此要加1个字节,因为要内存对齐,所以至少加8个字节