静态变量存储位置答疑:堆/栈?结构体中静态变量存于何处?
静态变量存储位置详解
1. 静态变量存堆还是栈?
既不在栈也不在堆,静态变量存在全局/静态存储区(又称数据段)。这个区域在程序启动时就分配好内存,直到程序退出才释放,专门用来存放全局变量、静态变量和常量。和栈(存储局部变量、函数调用上下文,随作用域销毁)、堆(存储动态分配的对象,靠自动或手动回收)的生命周期完全不同。
2. 结构体里定义静态变量的情况
在Swift结构体里定义静态变量时:
- 行为层面:它属于结构体类型本身,不属于任何结构体实例。所有实例共享这一个变量,修改它会影响所有访问该变量的代码,无需创建实例就能直接通过
结构体名.静态变量名访问(比如示例里的City.maxCityPopulation)。 - 存储位置:和普通静态变量一样,也存在全局/静态存储区,和结构体的类型元信息(比如类型描述)关联存放在这个区域的对应位置,但完全独立于结构体实例——结构体实例的变量(比如示例里的
name)如果是值类型会存在栈中(如果作为对象属性则可能在堆),但静态变量全程处于全局存储区,不会随实例创建或销毁发生变化。
你的推测方向是对的,静态变量确实和结构体的元信息关联存储,但具体属于全局存储区这个专门的特殊区域,用来存放生命周期和程序一致的静态/全局数据。
示例代码参考
struct City { var name: String static var maxCityPopulation: Int = 1000 // 存储在全局/静态存储区 }
内容的提问来源于stack exchange,提问作者Alex Fox
相关产品推荐
相关产品推荐

