Rust 中的 static 和 const

之前记录了 C++ 中的 static 和 const,提到 Rust 中这两个关键字有所不同,而且可能会更加复杂,记录在此,作积累用。

Rust 中的 const 更像是编译期的宏替换

rust 复制代码
pub const GICD_CTLR_ARE_NS_BIT: usize = 0x1 << 4;

编译器在编译期为 const 变量求值,const 变量不在内存中存储,而是被替换到使用他的位置(内联展开)。

Rust static

rust 复制代码
pub static GICD: DeviceRef<GicDistributor> = unsafe { DeviceRef::new(Platform::GICD_BASE as *const GicDistributor) };

会有一段固定的内存来存储 static 变量,static 变量具有 'static 也就是全局生命周期。

static 可以配合 mut 使用,但是是 unsafe 的。

static 变量的初值其实也是编译器在编译期计算出来的,只不过 static 变量在加载后有一个内存地址,加载器需要把编译器计算出来的初值写到那个内存地址上,再运行程序。

为什么感觉稍微复杂一点的全局类型就要用 static

以我的理解,static 往往伴随着可变的含义,这个全局变量在运行时是可能发生变化的,所以才不得不用 static,不得不让这个变量有一个全局唯一的地址,使得一方面更改这个变量后,其他地方能够看到这个变量的修改。

相关推荐
独好紫罗兰6 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
架构师沉默6 小时前
这个问题,决定你能不能进大厂!
经验分享
wuhen_n6 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
不会代码的小测试6 小时前
UI自动化-POM封装
开发语言·python·selenium·自动化
roman_日积跬步-终至千里6 小时前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
lsx2024066 小时前
C++ 基本的输入输出
开发语言
软件检测小牛玛6 小时前
软件功能测试机构推荐:资质权威,报告认可的软件测评机构 中承信安
经验分享·软件功能测试·第三方软件检测·软件测评机构·软件功能测试报告
CodeSheep程序羊7 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
独好紫罗兰7 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
I'mChloe7 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言