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,不得不让这个变量有一个全局唯一的地址,使得一方面更改这个变量后,其他地方能够看到这个变量的修改。

相关推荐
LDR00621 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术21 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园21 小时前
C++20 Modules 模块详解
java·开发语言·spring
swordbob1 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享1 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
SM177152118381 天前
NSK紧凑型FA系列丝杠技术详解
经验分享·规格说明书
Luminous.1 天前
C语言--day30
c语言·开发语言
星栈1 天前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
何以解忧,唯有..1 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽1 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言