swift - 为什么 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
解决方案
基于这种结构,MemoryLayout 的打印结果应该是 13,但实际上打印的是 20。任何想法为什么?
处理器通常喜欢将较大的类型与与其总线大小相匹配的边界对齐。您的结构中的 double 长度为 8 个字节,并且您正在为其编译的 64 位处理器可以在一次操作中读取它,如果它存储在一个 8 的倍数的地址中,那么这就是编译器放置它的位置。
推荐阅读
- ruby - 隐式接收器
- node.js - 浏览器重新加载后,服务器端的 React redux-saga 不采取行动
- arima - ARIMA 模型中的错误
- linkedin - LinkedIn API V1 - 发布到 Companies/{companyId}/shares 时收到“未经授权的请求”
- angular - 子组件隐藏时执行子组件功能
- azure-sqldw - Azure SQL 数据仓库中返回表类型的函数是否有替代方法?
- c# - Xamarin.IOS:无法解析引用 (System.Threading.Tasks.Extension.dll)
- r - R中的“合并”用NA替换实际值
- inno-setup - 设置完成后打开预定义的 url
- ruby - 如何使用 Ruby 从 S3 url 上传 Stripe identity_document?