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

Swift中ViewController内枚举静态常量的存储位置及地址询问

枚举内静态常量的存储位置解析

先明确核心逻辑:你代码里的Constants.height是枚举类型的静态存储常量,它的存储规则和枚举实例的存储没有直接关联,而是遵循Swift静态常量的通用存储规则。

存储位置

  • 因为height是编译期就能确定值的字面量常量(直接赋值16),它会被存放在数据段的只读区域(.rodata)——这类区域专门存放不可修改的全局/静态常量,避免意外篡改。
  • 如果是运行时才能确定值的静态常量(比如依赖运行时计算结果赋值),才会被放到数据段的可读写区域(.data),但你的例子显然属于前者。

内存地址说明

  • 它的实际运行时地址是不确定的:现代操作系统普遍启用地址空间布局随机化(ASLR),每次程序启动时数据段的加载基地址都会随机偏移,所以无法提前确定固定地址。
  • 你可以通过代码获取相对偏移或运行时地址:
    • 打印相对模块基地址的偏移:print(MemoryLayout.offset(of: \mainViewController.Constants.height))
    • 打印运行时实际地址:print(&mainViewController.Constants.height)

额外澄清

你提到的“操作系统将enum存储在栈段”,指的是枚举的实例对象(比如声明一个Constants的case实例作为局部变量时),这类值类型实例通常会分配在栈上。但静态属性属于类型本身的关联数据,和实例的存储位置完全是两个概念。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:44:53