You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中结构体与类的MemoryLayout内存大小差异原因咨询

结构体与类的内存布局大小差异解析

在Swift中,结构体是值类型,类是引用类型,这是两者通过MemoryLayout.size(ofValue:)获取的大小不同的核心原因:

1. 结构体(值类型)的内存计算

结构体A作为值类型,会直接将其所有属性的内存包含在自身的内存布局中。Swift的String类型在64位系统下,MemoryLayout<String>.size固定为16字节(内部包含指向存储的指针、长度等元数据),因此包含一个String属性的结构体A,其内存大小就是16字节,与String的内存大小完全一致。

2. 类(引用类型)的内存计算

类B是引用类型,实例化后,对象的实际数据(包括name属性)会存储在堆内存中,而你持有的变量本质上是一个指向堆中对象的指针。在64位系统下,指针的固定大小为8字节,因此MemoryLayout.size(ofValue:)返回的是这个指针的大小,而非堆中对象的实际内存占用。

验证代码示例

struct A {
    var name: String
}

class B {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let a = A(name: "example")
let b = B(name: "example")

print(MemoryLayout.size(ofValue: a)) // 输出 16
print(MemoryLayout.size(ofValue: b)) // 输出 8

内容的提问来源于stack exchange,提问作者Kam12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:24:17