gpt4 book ai didi

xcode - 这个 Swift 结构实际使用了多少存储空间?

转载 作者:搜寻专家 更新时间:2023-11-01 06:41:39 25 4
gpt4 key购买 nike

假设我有以下结构——

struct MyStruct {
var value1: UInt16
var value2: UInt16
}

我在我的代码中的某处使用这个结构,就像这样 -

var s = MyStruct(value1: UInt16(0), value2: UInt16(0))

我知道该结构将需要 32 位存储空间来存储两个 16 位整数 –

我不确定的是,除了为变量 s 分配一个 64 位指针之外,swift 是否为每个值分配了两个额外的 64 位指针。

这是否意味着上述代码的总存储需求会导致以下结果?

MyStruct.value1     - 16-bits
MyStruct.value1 ptr - 64-bits
MyStruct.value2 - 16-bits
MyStruct.value2 ptr - 64-bits
s ptr - 64-bits
–––––––––––––––––––––––––––––
Total - 224-bits

有人可以澄清一下吗?

最佳答案

MyStruct 是 4 个字节,因为 sizeof(UInt16) 是 2 个字节。要针对任何给定类型对此进行测试,请使用 sizeofsizeof 以字节为单位返回内存。

let size = sizeof(MyStruct) //4

如果您想获得给定实例的大小,您可以使用 sizeOfValue

var s = MyStruct(value1: UInt16(0), value2: UInt16(0))
let sSize = sizeofValue(s) //4

我相信指针的大小将取决于架构/编译器,在大多数计算机和许多较新的手机上都是 64 位的,但旧手机可能是 32 位的。

我认为没有办法真正获得指向 MyStruct.value1 的指针,如果我错了请纠正我(我正在尝试 &s.value1.

指针

Swift 中的结构是在堆栈上创建和传递的,这就是为什么它们具有值语义而不是引用语义的原因。

当在函数中创建结构时,它存储在堆栈中,因此它的内存在函数结束时被释放。它的引用只是堆栈指针或帧指针的偏移量。

关于xcode - 这个 Swift 结构实际使用了多少存储空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com