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

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.6.1. 静态(static)内存 static内存实际上是一个统称,它指的是程序编译后的文件中几个密切相关的区域。当程序执行的时候,这些区域会自动加载到内存里。 static内存里的值会在程序执行期间一直存活。 程序的static内存是包含程序的二进制代码的(通常映射为只读的)。随着程序的执行,它...

Rust中级教程】1.11. 生命周期(进阶) Pt.1:回顾、借用检查器、泛型生命周期

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 这篇文章在Rust初级教程的基础上对生命周期这一概念进行了补充,建议先看【Rust自学】专栏的第10章的文章。 1.11.1. 回顾 在初级教程中我们提到过:Rust里每个引用都有生命周期,它就是引用保持合法的作用域(scope),大多数时候都是隐式并且由编译器推断出来的。 对某个变量取得引用时生命周期...

Rust中级教程】1.13. 内存中的类型 Pt.1:对齐(Alignment)、布局(Layout)、`repr`属性

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.13.1. 类型的基本职责 每个Rust值都有类型,而类型的职责在于告诉你如何解释内存中的比特位(bits)。 例如:0b10111101这串比特(bits)本身并没有意义,但是: 用u8类型来解释就会得到数字189用i8类型来解释就会得到数字-67 当自定义类型时:编译器决定该类型的各部分在内存表...

Rust中级教程】1.15. Trait bounds(Trait 约束)的编译与分派

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.15.1. 静态分发(static dispatch) 编译泛型代码或者调用dyn Trait(详见【Rust自学】17.2.3. trait对象执行的是动态派发)上的方法时发生了什么? 编译器会针对每个T(每个类型),都将类型或函数复制一部分(每个类型都有自己的函数),这个过程叫单态化(monom...

Rust中级教程】1.17. 孤儿规则与连贯性(一致性):泛实现(Blanket Implementation)、覆盖实现(Covered Implementation)

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.17.1. 连贯性(一致性)属性 连贯性(或者叫一致性)是指对于给定的类型和方法,只会有一个正确的选择,用于该方法对该类型的实现。 孤儿规则(orphan rule)指的是只要trait或者类型在本地的crate,那就可以为该类型实现该trait。 比如说: 你定义在本地的类型可以实现Debug t...

Rust中级教程】2.9. API设计原则之显然性(obvious) :文档与类型系统、语义化类型、使用“零大小”类型

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 2.9.1. 文档与类型系统 用户可能不会完全理解API的所有规则和限制。所以你写的API应该让你的用户易于理解,并且难以用错。 通过Rust的文档与类型系统,我们可以尽量实现这个需求。 2.9.2. 文档 让API透明化的第一步就是写出好的文档。 写出好的文档有这么几点要求: 1. 清楚的记录 清楚的...

Rust中级教程】1.1. 指针概览(上):什么是指针、指针和引用的区别

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.1.1. 什么是指针 指针是计算机引用无法立即直接访问的数据的一种方式。 一个非常形象的类比就是书的目录,目录相当于指针,目录里面存的是对应内容所在的页码;在计算机中,指针存的是一个地址。在书里面我们通过目录的页码就可以找到具体的内容,在计算机里,我们通过指针里存的地址来找到我们想要访问的数据。下图...

Rust中级教程】1.3. 内存 Pt.1:各类概念的定义及变量的高级模型和低级模型

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.3.1. 值 在讲内存之前我们得先讲三个概念,第一个是值。值指的是类型 + 类型值域中的一个元素。 例如true,它的类型是bool类型,它的值域里就两个值——一个true,一个false。值指的是类型 + 类型值域中的一个元素,true的值就是bool类型 + 值域中的元素true。 通过值的类型...

Rust中级教程】1.4. 内存 Pt.2:栈内存、栈帧(stack frame)、栈指针(stack pointer)

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.4.1. 内存区域 程序有很多的内存区域,并不都是在DRAM上的。三个比较重要的区域是栈内存stack、堆内存heap和静态内存staic。 栈内存和堆内存相对比,栈内存更快堆内存更慢。 1.4.2. 栈内存(stack) 有这么一个公理,叫做:“有疑问时,首选Stack”。但是如果想把数据放在栈内...

Rust中级教程】1.5. 内存 Pt.3:深入探究Rust堆内存底层实现

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(==) 1.5.1. 堆内存(Heap) Heap意味着混乱,而stack则相对比较整齐。Heap是一个内存池,并没有绑定到当前程序的调用栈,而stack绑定到当前程序的调用栈。Heap是为在编译时没有已知大小的类型准备的,而stack上的数据在编译时大小必须已知。 如图,heap上的数据存放的位置和自身的大小...
© 2025 LMLPHP 关于我们 联系我们 友情链接 耗时0.003638(s)
2025-03-27 04:16:36 1743020196