一、Rust的内存管理
采用虚拟内存空间在栈和堆上分配内存,这是诸多编程语言通用的内存管理基石,Rust也是一样。然而,与c/c++语言不同的是,Rust不需要开发者显式地通过malloc/new或free/delete之类的函数去分配和回收堆内存。
栈内存的生命周期是短暂的,会随着栈展开(如函数调用)的过程而被自动清理。而堆内容是动态的,其分配和重新分配并不遵循某个固定的模式,所以需要使用指针来对其进行跟踪。
Rust也引入了智能指针来管理内存。智能指针在堆上开辟内存空间,并拥有其所有权,通过存储于栈中的指针来管理堆内存。智能指针的RAII机制利用栈的特点,在栈元素被自动清空时自动调用析构函数,来释放智能指针所管理的堆内存间。
函数的局部变量
在函数中定义的局部变量都会被默认存储到栈中。这和c/c++语言,甚至更多的语言行为都一样,但不同的是,Rust编译器可以检查末初始化的变量,以保证内存安全。
Rust编译器会对代码做基本的静态分支流程分析。
当函数调用完毕时,栈帧会被释放,局部变量会被清空。如果变量指向堆内存,那么Rust会自动清空其指向的已分配堆内存。
Rust中的指针
Rust中的指针大致可以分为三种:引用、原生指针(裸指针)和智能指针。
RAII(构造和析构)
RAII使用构造函数来初始化资源,使用析构函数来回收资源。
RAII与GC最大的不同在于,RAII将资源托管给创建堆内存的指针对象本身来管理,并保证资源在其生命周期内始终有效,一旦生命周期终止,资源马上会被回收。
二、Rust的内存安全
三、所有权系统