郑州建站公司网站,进不去的网站用什么浏览器,都江堰发布,网页推广方案喜欢的话别忘了点赞、收藏加关注哦#xff08;加关注即可阅读全文#xff09;#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵#xff01;(#xff65;ω#xff65;)
1.6.1. 静态(static)内存
static内存实际上是一个统称#xff0c;它指的是程序编译后的文…喜欢的话别忘了点赞、收藏加关注哦加关注即可阅读全文对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
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. const与static的区别
const关键字会把紧随它的东西声明为常量例如
const X: i32 123;X被声明为了常量
常量可在编译的时候完全计算出来。在计算期间任何引用常量的代码会被替换为常量的计算结果值。
例如:
const X: i32 123;
println!({}, X);这句话中的打印操作就会在编译时被改为
println!({}, 123);所以常量没有内存或关联其它存储因为它不是一个地方。你可以把常量理解为某个特殊值的方便的名称。