制定一份网站界面设计方案,商务网站开发需求分析,wordpress怎么设置,网站的权重是什么意思RUST 全局变量 rust 全局变量编译期初始化的全局变量静态常量静态变量原子类型的静态变量 运行期初始化的全局变量lazy_staticBox::leakOnceCell OnceLock 参考文档 rust 全局变量
编译期初始化的全局变量
静态常量
在编译期初始化#xff0c;所以其赋值只能是表达式… RUST 全局变量 rust 全局变量编译期初始化的全局变量静态常量静态变量原子类型的静态变量 运行期初始化的全局变量lazy_staticBox::leakOnceCell OnceLock 参考文档 rust 全局变量
编译期初始化的全局变量
静态常量
在编译期初始化所以其赋值只能是表达式/数学表达式即在编译期就能计算出的值使用 const 修饰类型不能省略常量名全部大写声明周期贯穿整个程序编译器会尽可能内联到代码在其作用域内不允许重复定义
静态变量
使用 static 来修饰必须使用 unsafe 语句才能访问和修改 static 变量在同一线程内/不在乎数据准确性的情况下才应该使用全局静态变量定义静态变量时必须赋值为在编译期就可以计算出的值常量表达式/数学表达式不能是运行时才能计算出的值整个程序中静态变量只有一个实例所有应用都会只想同一个地址存储在静态变量的值必须要实现 Sync trait ;
原子类型的静态变量
可以实现多线程安全不需要使用 unsafe 语句
运行期初始化的全局变量
lazy_static
用于初始化静态变量可以在运行期进行静态变量初始化有一定的性能损失内部使用了一个 std::sync::once 并发原语每次访问该变量时都会执行一次原子命令用于确认该变量是否被初始化lazy_static 宏匹配的是 static ref 所以定义的静态变量都是不可变引用可以根据场景对全局变量进行动态初始化
Box::leak
可以将一个变量从内存中泄露然后将其变成 static 生命周期可以用于将局部变量赋值给全局变量
OnceCell OnceLock
前者用于单线程后者用于多线程用来存储堆上的信息并且具有最多只赋值一次的特性
参考文档
Rust语言圣经(Rust Course)