Swift 中 MemoryLayout.size 中的数组大小
Size of arrays in MemoryLayout.size in Swift
抱歉,如果问题可能重复,我既不能在这里找到它,也不能使用 Google。
我是不安全的新手 Swift 我想知道为什么布尔数组的大小(例如 10 个字节)仍然是 8 个字节?
如果我不能说出我的意思,我想知道您是否可以看一下这段代码:
var boolArray = [Bool]()
for _ in 1...10{
boolArray.append(true)
}
print(MemoryLayout.size(ofValue: boolArray))
我不明白为什么它打印 8 而数组有 10 个至少包含 10 个字节的布尔值。
因为函数大小的结果不包括任何动态分配或外行存储。参见 https://developer.apple.com/documentation/swift/memorylayout/2486283-size
那是因为 Array
本身并不真正存储任何东西 - 在内部,它们持有对堆分配内存块的引用,该内存块真正存储数据。
这样做的原因之一是优化 - 它允许使用写时复制机制。 Array
是一个 struct
,因此它是一个值类型。但是,它保存的数据不需要每次复制 Array
时都复制 - 相反,多个 Arrays
可以指向同一内存区域,只要它们不修改它。
抱歉,如果问题可能重复,我既不能在这里找到它,也不能使用 Google。
我是不安全的新手 Swift 我想知道为什么布尔数组的大小(例如 10 个字节)仍然是 8 个字节?
如果我不能说出我的意思,我想知道您是否可以看一下这段代码:
var boolArray = [Bool]()
for _ in 1...10{
boolArray.append(true)
}
print(MemoryLayout.size(ofValue: boolArray))
我不明白为什么它打印 8 而数组有 10 个至少包含 10 个字节的布尔值。
因为函数大小的结果不包括任何动态分配或外行存储。参见 https://developer.apple.com/documentation/swift/memorylayout/2486283-size
那是因为 Array
本身并不真正存储任何东西 - 在内部,它们持有对堆分配内存块的引用,该内存块真正存储数据。
这样做的原因之一是优化 - 它允许使用写时复制机制。 Array
是一个 struct
,因此它是一个值类型。但是,它保存的数据不需要每次复制 Array
时都复制 - 相反,多个 Arrays
可以指向同一内存区域,只要它们不修改它。