Rust 编程第一课》 学习笔记 Day 9

55 阅读1分钟

大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。第九天还是继续和大家一起学习 Rust😊

在 Rust 里,堆内存的生命周期,会默认和其栈内存的生命周期绑定在一起。所以在这种默认情况下,在每个函数的作用域中,编译器就可以对比值和其引用的生命周期,来确保“引用的生命周期不超出值的生命周期”。

如果一个值的生命周期贯穿整个进程的生命周期,那么我们就称这种生命周期为静态生命周期。当值拥有静态生命周期,其引用也具有静态生命周期。我们在表述这种引用的时候,可以用 'static 来表示。一般来说,全局变量、静态变量、字符串字面量(string literal)等,都拥有静态生命周期。

如果一个值是在某个作用域中定义的,也就是说它被创建在栈上或者堆上,那么其生命周期是动态的。

全局变量、静态变量、字符串字面量、代码等内容,在编译时,会被编译到可执行文件中的 BSS/Data/RoData/Text 段,然后在加载时,装入内存。因而,它们的生命周期和进程的生命周期一致,所以是静态的。所以,函数指针的生命周期也是静态的,因为函数在 Text 段中,只要进程活着,其内存一直存在。