news 2026/7/24 20:40:47

【Rust中级教程】1.6. 内存 Pt.4:静态(static)内存与‘static生命周期标注

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust中级教程】1.6. 内存 Pt.4:静态(static)内存与‘static生命周期标注

1.6 内存 Pt.4:静态(static)内存与'static生命周期标注

1.6.1. 静态(static)内存

static内存实际上是一个统称,它指的是程序编译后的文件中几个密切相关的区域。当程序执行的时候,这些区域会自动加载到内存里。

static内存里的值会在程序执行期间一直存活。

程序的static内存是包含程序的二进制代码的(通常映射为只读的)。随着程序的执行,它会在文本段的二进制代码中挨个指令进行遍历,而当函数被调用时就进行跳跃。

static内存会持有使用static声明的变量的内存,也包括某些常量值,例如字符串。

1.6.2.‘static生命周期标注

‘static是一个特殊的生命周期,它的名字来源于static内存区。它将引用标记为只要static内存还存在(也就是程序关闭之前),那么引用就合法

static变量的内存在程序开始运行时就分配了。指向static内存中变量的引用,按定义来说,就是'static的,因为在程序关闭之前它不会被释放;但是有'static生命周期标注的引用可以不指向static内存。

既然'static生命周期标注的引用可以不指向static内存,为什么还要把这种生命周期命名为'static呢?有'static标注但不存储在static内存里这不是误导人吗?
-'static这个名称仍然适用的原因在于:一旦你创建了一个'static的生命周期的引用,就程序的其余部分而言,它所指向的内存都可能在static内存中,因为程序想要使用它多久都没问题

话句话说:'static这个名字可能会让人误以为所有带有'static生命周期的引用都指向静态内存区(即程序运行期间一直存在的全局变量或常量)。但实际上,'static只是表示这个引用在整个程序生命周期内都是有效的,至于它指向的内存是否真的存储在静态区,并不一定。换句话说,'static生命周期的引用意味着“这个引用可以一直存在,程序可以随时使用它”,但并不强制要求它的内容必须是静态分配的。

在写Rust代码的时候,遇到更多的会是'staic生命周期标注而不是static内存。'static经常出现在类型参数的trait bounds上。

例如T: 'static就代表类型T可以存活我们想要的任何时长(知道程序关闭),同时这也要求T拥有所有权的并且是自给自足的。这代表着这个类型要么它不借用其它(非static)值,要么它借用的东西是static的。这样就能保证类型能活到程序结束。

1.6.3.conststatic的区别

const关键字会把紧随它的东西声明为常量,例如:

const X: i32 = 123;
  • X被声明为了常量

常量可在编译的时候完全计算出来。在计算期间,任何引用常量的代码会被替换为常量的计算结果值。

例如:

const X: i32 = 123; println!("{}", X);

这句话中的打印操作就会在编译时被改为:

println!("{}", 123);

所以常量没有内存或关联其它存储(因为它不是一个地方)。你可以把常量理解为某个特殊值的方便的名称。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 20:40:18

Day 02 · 环境搭建:一套装备打天下

AI Python 系列」第 01 栏 AI 时代的 Python 办公自动化 全栏 20 篇 零成本跟完 🍃 品牌:梅雅达编程笔记 开篇 你是不是也卡在这一步 Day 01 说了,AI 办公自动化能帮你省钱省时间。很多读者看完热血沸腾——然后打开电脑,对…

作者头像 李华
网站建设 2026/7/24 20:39:38

终极免费A股分析指南:如何零成本构建AI驱动的智能投资系统

终极免费A股分析指南:如何零成本构建AI驱动的智能投资系统 您是否曾为A股市场的复杂波动而烦恼?是否渴望拥有专业的股票分析工具却受限于高昂费用?daily_stock_analysis正是为您量身打造的解决方案——这是一款完全免费的AI驱动股票智能分析…

作者头像 李华
网站建设 2026/7/24 20:34:09

openEuler-22.03-LTS-x86_64离线安装nginx过程记录

给了台机器,是新系统,通过堡垒机访问,不通互联网,环境的安装就变得相当麻烦,先把过程记录下来,方便以后再次安装时可以有资料可查 首先,需要安装tar命令包 进入官网rpm包仓库, https://repo.openeuler.org/openEuler-22.03-LTS/everything/x86_64/Packages/ 找到并…

作者头像 李华
网站建设 2026/7/24 20:32:30

抖音下载神器:如何一键批量下载无水印视频的完整指南

抖音下载神器:如何一键批量下载无水印视频的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

作者头像 李华
网站建设 2026/7/24 20:32:18

多智能体集群落地:Spring AI Alibaba 六大协作模式深度拆解与高并发实战

多智能体集群落地:Spring AI Alibaba 六大协作模式深度拆解与高并发实战 当单个智能体不再是瓶颈,真正的挑战就不再是“怎么再写一个 Prompt”,而是“如何让一组具备不同职责的智能体,在高并发、分布式、可观测、可回滚的前提下稳定协作”。围绕电商大促客服场景,本文系统…

作者头像 李华