【发布时间】:2018-08-26 01:22:51
【问题描述】:
MemoryLayout 如何计算结构的大小?
我阅读了this 的文章,我似乎理解得很好,直到我陷入了以下问题:
struct CertifiedPuppy1 {
let age: Int
let isTrained: Bool
let isCertified: Bool
}
MemoryLayout<CertifiedPuppy1>.size // 10
MemoryLayout<CertifiedPuppy1>.stride // 16
MemoryLayout<CertifiedPuppy1>.alignment // 8
struct CertifiedPuppy2 {
let isTrained: Bool
let age: Int
let isCertified: Bool
}
MemoryLayout<CertifiedPuppy2>.size // 17
MemoryLayout<CertifiedPuppy2>.stride // 24
MemoryLayout<CertifiedPuppy2>.alignment // 8
struct CertifiedPuppy3 {
let isTrained: Bool
let isCertified: Bool
let age: Int
}
MemoryLayout<CertifiedPuppy3>.size // 16 <--why not 10, like for CertifiedPuppy1 ??--
MemoryLayout<CertifiedPuppy3>.stride // 16
MemoryLayout<CertifiedPuppy3>.alignment // 8
问题是,为什么CertifiedPuppy3 的大小是 16,而不是像 CertifiedPuppy1 那样的 10?
【问题讨论】:
-
每个
Int都与一个 8 字节边界对齐并且的大小为 8。 -
啊,你的意思是CertifiedPuppy1:8 + 1 + 1 +(缓冲区6,忽略)= 10; CertifiedPuppy3:1 + 1 +(缓冲区 6,计数)+ 8 = 16
标签: swift struct swift4 memory-layout