【发布时间】:2020-06-11 22:27:27
【问题描述】:
假设有两个数组,一个具有 n 个 Class 元素,另一个具有 n 个 Struct 元素。哪个会消耗更多内存?当我们开始操作数组时会发生什么。以下是我尝试过的。
class C {
var a = ""
}
struct S {
var a = ""
}
func sizeOf<T>(_ value: T) {
print(MemoryLayout.size(ofValue: value))
}
let classVar = C()
let structVar = S()
let arrayClass = [classVar, classVar, classVar]
var arrayStruct = [structVar, structVar, structVar]
sizeOf(classVar)
sizeOf(structVar)
sizeOf(arrayClass)
sizeOf(arrayStruct)
var newStruct = structVar
newStruct.a = "Value changed"
sizeOf(structVar)
arrayStruct.append(newStruct)
sizeOf(arrayStruct)
输出
8
16
8
8
16
8
为什么 struct 的大小大于 class 以及为什么两个数组的大小相同?是因为数组本身是一个结构吗?谁能提供详细的解释?
【问题讨论】:
-
为什么不分别分配一百万并找出答案?
-
@tadman 我尝试附加
10000元素,结果是一样的。但是在操场上计算这个需要很多时间,分配一百万个每个需要更长的时间。 -
这至少是一个数据点。请注意,如果编译,分配时间不会太长,所以如果这是一个选项,请尝试。这是否列出了对象的总内存占用?
-
@Jonathan 如果您有数据,值得添加作为答案。
-
Swift 结构通常取决于其组件的大小,在这种情况下,
String的大小为 16 字节,这就是您所看到的。类通常是指针大小的,因为它们是对某处分配的内存的引用。Arrays 本身的布局方式是,无论它们包含什么,它们都是固定大小的(我假设它们是指向某些底层实现的指针)。