C里面是通过malloc/free手动管理堆上内存空间的,而Rust则有多种方式,其中最常用的一种就是Box,通过Box::new()可以在堆上申请一块内存空间,不像C里面一样堆上空间需要手动调用free释放,Rust中是在编译期编译器借助lifetime对堆内存生命期进行分析,在生命期结束时自动插入free。当前Rust底层即Box背后是调用jemalloc来做内存管理的,所以堆上空间是不需要程序员手动去管理释放的。很多时候你被编译器虐得死去活来时,那些borrow, move, lifetime错误其实就是编译器在教你认识内存布局,教你用lifetime规则去控制内存。大多数带GC的面向对象语言里面的对象都是借助box来实现的,比如常见的动态语言Python/Ruby/JavaScript等,其宣称的"一切皆对象(Everything is an object)",里面所谓的对象基本上都是boxed value。