arrays - Swift 中 MemoryLayout.size 中数组的大小
问题描述
抱歉,如果问题可能重复,我既无法在此处找到,也无法使用 Google。
我是不安全 Swift 的新手,我想知道为什么布尔数组的大小(例如 10 个字节)仍然是 8 个字节?
如果我不能说出我的意思,我会想知道你是否可以看看这段代码:
var boolArray = [Bool]()
for _ in 1...10{
boolArray.append(true)
}
print(MemoryLayout.size(ofValue: boolArray))
我不明白为什么它打印 8 而数组有 10 个至少包含 10 个字节的布尔值。
解决方案
这是因为 anArray
本身并没有真正存储任何东西——在内部,它们持有对堆分配的内存的引用,它真正存储了数据。
这样做的原因之一是优化——它允许使用写时复制机制。Array
是 a struct
,因此它是一个值类型。但是,它保存的数据不需要每次复制时都复制Array
- 相反,多个Arrays
可以指向同一个内存区域,只要它们不修改它。
推荐阅读
- google-maps - 设置动画相机的持续时间
- google-sheets - Google Sheets API:“badRequest:此文档太大,无法继续编辑。” 在新的 Google 表格上
- python - 如何使用 kivy 访问自拍相机
- css - 使用 http/2 和 css 的 ES6 导入
- node.js - 如何将字典作为json写入文件
- c# - 剃刀页面中是否有类似 OnLeave() 的内容?
- c# - 如何通知所有订阅者类关于一个类中引发的事件?
- c# - 主窗口不显示内容
- firebase - 创建要在 Firestore 规则中重用的变量
- assembly - GDB 布局无法正确显示程序集