内存管理和安全性
程序和内存。
内存分配和安全性。
内存管理。
堆栈和堆。
安全三要素——所有权、借用及生命周期。
智能指针类型。
内存管理及其分类
手动型:C语言采用了这种内存管理机制,且完全由程序员负责,在程序代码使用完内存之后调用free函数来释放内存。
自动型:采用这种内存管理形式的语言包括一个额外的运行时线程,即GC,它作为守护线程与程序一起运行。
半自动型:Swift等语言属于这一类别。它们没有作为运行时的一部分的内置专用GC,但提供了引用计数类型,这可以细粒度地实现自动化内存管理。
内存分配简介
堆栈 : 函数中所有let绑定都存储在堆栈中,它既可以是值本身,也可以是指向堆上内存地址的指针。
堆栈上内存分配速度很快,因为分配和释放内存只需一条CPU指令:递增/递减堆栈帧指针。堆栈帧指针(esp)是一个CPU寄存器,它始终指向堆栈的最顶部。
虽然堆栈简洁、高效,但实际上程序还需要生命周期更长的变量,因此我们需要使用堆。
堆:堆用于处理更复杂的动态的内存分配需求。Rust在堆上分配内存的唯一方法是通过智能指针类型。Rust中的智能指针类型实现了Drop特征,它指定了如何释放值所使用的内存,并且在语义上定义了类似于C++中析构函数的方法。
内存管理的缺陷
最令人担忧的情况是释放在堆上分配的数据。堆内存需要谨慎使用,如果没有释放,堆中的值可能在程序的生命周期中永久存在,并且最终会导致应用程序被内核中的内存越界(O