我知道您可以使用MemoryLayout<T>.size
来获取类型T
的大小。
例如:MemoryLayout<Int32>.size // 4
然而,对于类实例(对象),MemoryLayout<T>.size
返回对象引用的大小(64位机器上为8字节),而不是堆上实际对象的大小。
class ClassA { // Objects should be at least 8 bytes
let x: Int64 = 0
}
class ClassB {// Objects should be at least 16 bytes
let x: Int64 = 0
let y: Int64 = 0
}
MemoryLayout<ClassA>.size // 8
MemoryLayout<ClassB>.size // 8, as well :(
如何获取对象本身的大小?
对于那些好奇的人,我并没有实际需要这个功能,我只是在探索Swift及其与C的互操作性。
@objc
),Swift 默认情况下也不使用消息分发(通过层次结构查找实现),而是使用其自己的 vtables 进行表分发(但对于dynamic
成员将返回到消息分发),在某些情况下(例如final
/private
类),可以静态分派和内联。 - Hamish