Swift 中 MemoryLayout.size 中数组的大小

问题描述 投票:0回答:2

抱歉,如果问题可能重复,我既无法在这里找到它,也无法使用谷歌。

我是不安全的 Swift 新手,我想知道为什么 Bool 数组的大小(例如 10 字节)仍然是 8 字节?

如果我无法说出我的意思,我想知道您是否可以看一下这段代码:

var boolArray = [Bool]()
for _ in 1...10{
    boolArray.append(true)
}
print(MemoryLayout.size(ofValue: boolArray))

我不明白为什么它打印 8,而数组有 10 个布尔值,至少包含 10 个字节。

arrays swift unsafe memory-layout
2个回答
5
投票

那是因为

Array
本身并不真正存储任何东西 - 在内部,它们保存对堆分配的内存块的引用,该内存块真正存储数据。

这样做的原因之一是优化——它允许使用写时复制机制。

Array
struct
,因此它是一种值类型。然而,它所保存的数据不需要每次复制
Array
时都被复制 - 相反,多个
Arrays
可以指向同一内存区域,只要它们不修改它即可。


4
投票

因为函数大小的结果不包括任何动态分配或线外存储。参见

MemoryLayout.size(ofValue:)

© www.soinside.com 2019 - 2024. All rights reserved.