如何找到结构占用的内存量?

时间:2015-07-22 23:41:51

标签: ios swift memory memory-management

简单问题:有没有办法找出特定结构占用多少内存?

理想情况下,我希望将其打印到控制台。

编辑:Krumelur使用sizeof函数提供了简单的解决方案。

不幸的是,它似乎不适合数组。以下代码

println("Size of int \(123) is: \(sizeofValue(123))")
println("Size of array \([0]) is: \(sizeofValue([0]))")
println("Size of array \([0, 1, 8, 20]) is: \(sizeofValue([0, 1, 8, 20]))")

生成此输出:

Size of int 123 is: 8
Size of array [0] is: 8
Size of array [0, 1, 8, 20] is: 8

因此,不同大小的数组会给出相同的大小,这肯定是不正确的(至少对我而言)。

2 个答案:

答案 0 :(得分:2)

sizeof(T)运算符在Swift中可用。它返回指定类型或变量占用的大小,就像在C中一样。

然而,与C不同,没有堆栈分配数组(静态数组)的概念。数组是指向对象的指针,这意味着它的大小始终是指针的大小(这与C中的堆分配数组相同)。要获得数组的大小,您必须执行类似

的操作
array.count * sizeof(Telement)

但即使只有在Telement不是分配堆内存的对象时才会这样。

答案 1 :(得分:0)

现在 Swift 标准库似乎支持此功能。

Docs

MemoryLayout.size(ofValue: self)