Ios 我如何找到一个结构占用了多少内存?
简单问题:有没有一种方法可以找出特定结构占用了多少内存 理想情况下,我希望它打印到控制台Ios 我如何找到一个结构占用了多少内存?,ios,swift,memory,memory-management,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:
编辑: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
因此,不同大小的数组给出了相同的大小,但肯定是不正确的(至少就我而言)。Swift中提供了sizeof(T)
操作符。它返回指定类型或变量占用的大小,就像在C中一样
然而,与C不同的是,没有堆栈分配数组(静态数组)的概念。数组是指向对象的指针,这意味着它的大小始终是指针的大小(这与C中的堆分配数组相同)。要获得数组的大小,必须执行以下操作
array.count * sizeof(Telement)
但即使如此,只有当
Telement
不是一个分配堆内存的对象时才是如此。这似乎现在在Swift标准库中得到了支持
也许是我的结构?@Krumelur看起来不错。。。你为什么不回答呢?字符太少了,我必须要有创意:)@Krumelur如果你愿意,你可以再添加一些字符,告诉我
sizeof(MyStruct)
的返回值是多少。或者sizeofValue(myStruct)
。找不到,链接到文档也会对我有所帮助。8是64位地址的大小,我假设它是swift中数组变量的大小?好的,我知道了-我将只使用sizeof
对数组的元素类型使用,乘以数组中元素的计数,然后对所有数组求和。
MemoryLayout.size(ofValue: self)