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

静态变量存储位置答疑:堆/栈?结构体中静态变量存于何处?

静态变量存储位置详解

1. 静态变量存堆还是栈?

既不在栈也不在堆,静态变量存在全局/静态存储区(又称数据段)。这个区域在程序启动时就分配好内存,直到程序退出才释放,专门用来存放全局变量、静态变量和常量。和栈(存储局部变量、函数调用上下文,随作用域销毁)、堆(存储动态分配的对象,靠自动或手动回收)的生命周期完全不同。

2. 结构体里定义静态变量的情况

在Swift结构体里定义静态变量时:

  • 行为层面:它属于结构体类型本身,不属于任何结构体实例。所有实例共享这一个变量,修改它会影响所有访问该变量的代码,无需创建实例就能直接通过结构体名.静态变量名访问(比如示例里的City.maxCityPopulation)。
  • 存储位置:和普通静态变量一样,也存在全局/静态存储区,和结构体的类型元信息(比如类型描述)关联存放在这个区域的对应位置,但完全独立于结构体实例——结构体实例的变量(比如示例里的name)如果是值类型会存在栈中(如果作为对象属性则可能在堆),但静态变量全程处于全局存储区,不会随实例创建或销毁发生变化。

你的推测方向是对的,静态变量确实和结构体的元信息关联存储,但具体属于全局存储区这个专门的特殊区域,用来存放生命周期和程序一致的静态/全局数据。

示例代码参考

struct City {
   var name: String
   static var maxCityPopulation: Int = 1000 // 存储在全局/静态存储区
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:34