【问题标题】:How do I find how much memory is taken by a struct?如何找到一个结构占用了多少内存?
【发布时间】:2015-10-13 01:53:58
【问题描述】:

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

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


编辑: 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

所以不同大小的数组给出相同的大小肯定是不正确的(至少对我来说是这样)。

【问题讨论】:

  • sizeof(MyStruct) 也许?
  • @Krumelur 看起来不错......你为什么不把它作为答案?
  • 字符太少,我必须有创意:)
  • @Krumelur 如果你愿意,你可以通过告诉我sizeof(MyStruct) 的返回值是什么单位来添加更多字符。或sizeofValue(myStruct)。两者都找不到,文档链接也会对我有所帮助。
  • 8 是 64 位地址的大小,我认为这是 swift 中的数组变量?

标签: ios swift memory memory-management


【解决方案1】:

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

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

array.count * sizeof(Telement)

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

【讨论】:

  • 好吧,我明白了 - 我将在数组的元素类型上使用 sizeof,乘以数组中的元素数,然后对所有数组求和。
【解决方案2】:

现在 Swift 标准库似乎支持这一点。

Docs

MemoryLayout.size(ofValue: self)

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多