首页 > 解决方案 > 为什么 bool 占用 7 个字节的内存?

问题描述

我正在使用 Xcode Playground 研究 Swift 内存布局,并创建了一个带有 bool、double 和 int32 的结构,如下所示。基于这种结构,MemoryLayout 的打印结果应该是 13,但实际上打印的是 20。任何想法为什么?也许我错过了一些东西。谢谢!

struct SampleStruct { //0
    var bool: Bool = true //1
    var double: Double = 1 //8
    var int32: Int32 = 122 //4
}

MemoryLayout<SampleStruct>.size //Should print 13, but prints 20

标签: swiftswift-playgroundmemory-layout

解决方案


基于这种结构,MemoryLayout 的打印结果应该是 13,但实际上打印的是 20。任何想法为什么?

处理器通常喜欢将较大的类型与与其总线大小相匹配的边界对齐。您的结构中的 double 长度为 8 个字节,并且您正在为其编译的 64 位处理器可以在一次操作中读取它,如果它存储在一个 8 的倍数的地址中,那么这就是编译器放置它的位置。

https://swiftunboxed.com/internals/size-stride-alignment/


推荐阅读