TL;DR: Most programs will never have to worry about fragmentation in C, C++ or Rust. Those which do will have to handle it by themselves.
Rust编程语言的自动内存管理是否需要回收碎片内存?
Rust没有自动内存管理功能;它具有手动内存管理,编译器会检查其是否正确 . 差异可能听起来很理论,但这很重要,因为它意味着内存操作直接映射到源代码,幕后没有任何魔力 .
通常,语言需要具有压缩GC才能压缩碎片存储器 . Rust与C和C一样,没有GC,因此根据使用情况,它的内存可能会碎片化,并且如果没有程序释放恼人的块,则无法进行碎片整理,因为重定位是不可能的 .
但是,在我们开始担心碎片化之前,我们必须先考虑它的含义 .
What is the effect of fragmentation?
碎片会造成物理内存和地址空间的浪费:您的程序占用的空间超过了它的使用量 . 在极端情况下,即使未使用的内存量足以授予它们,这种浪费也可能阻止分配请求 .
与GC并行时,重要的是要意识到大多数GC语言也会造成一些浪费 .
实际上,值得注意的是,支离破碎不是唯一的浪费来源;过度分配也是一个常见的“问题”:
a Vec 将分配2个幂的元素,但也许你只使用 2^N + 1 ,浪费 2^N - 1 个槽
a BTreeMap 或 HashMap 分配的空间比实际使用的空间大
甚至内存分配器通常会分配预定义大小的块,因此要求157个字节实际上可