当前位置: 首页 > news >正文

RUST 学习之全局变量

RUST 全局变量

  • rust 全局变量
    • 编译期初始化的全局变量
      • 静态常量
      • 静态变量
      • 原子类型的静态变量
    • 运行期初始化的全局变量
      • lazy_static
      • Box::leak
      • OnceCell & 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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Frida0D - hook JNIEnv 相关函数
  • gradle 学习备忘
  • 基于EPS32C3电脑远程开机模块设计
  • springboot健康管理系统-计算机毕业设计源码25248
  • vue3项目,本地页面正常显示,打包后页面空白
  • 计算机视觉中,什么是上下文信息(contextual information)?
  • Ubuntu系统修改静态IP
  • 软件测试报告示例模板
  • 高效录屏攻略:电脑视频录制时声音同步捕获技巧,轻松搞定高清音质
  • 【C++二分查找】911. 在线选举
  • vue3定义响应式数据(ref,reactive)
  • 《中文Python穿云箭量化平台二次开发技术10》基于Tkinter的可视化股票池量化平台开发技术
  • 【Kubernetes知识点问答题】资源配额 / 访问控制
  • 摩托车加装车载手机充电usb方案/雅马哈USB充电方案开发
  • OpenCV结构分析与形状描述符(19)查找二维点集的最小面积外接旋转矩形函数minAreaRect()的使用
  • 4个实用的微服务测试策略
  • avalon2.2的VM生成过程
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CAP 一致性协议及应用解析
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Js基础知识(四) - js运行原理与机制
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1092
  • Spring框架之我见(三)——IOC、AOP
  • windows下如何用phpstorm同步测试服务器
  • windows下使用nginx调试简介
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里研究院入选中国企业智库系统影响力榜
  • 初识MongoDB分片
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 检测对象或数组
  • 看域名解析域名安全对SEO的影响
  • 前嗅ForeSpider中数据浏览界面介绍
  • 我从编程教室毕业
  • 在Mac OS X上安装 Ruby运行环境
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #Linux(帮助手册)
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (30)数组元素和与数字和的绝对差
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十三)Flask之特殊装饰器详解
  • (转) Android中ViewStub组件使用
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **python多态
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 的缓存方案