请查看以下代码:
当调用
Rust 是如何确定要分配的新大小的策略呢?
例如,是否像这样每次向向量推送元素时就进行分配?
fn main() {
let mut vec: Vec<u8> = Vec::new();
vec.push(0);
vec.push(1);
vec.push(2);
vec.push(3);
vec.push(4);
vec.push(5);
vec.push(6);
vec.push(7);
vec.push(8);
}
当调用
Vec::new()
时,Rust 不知道需要分配多少内存,每次需要为向量分配更多空间时,它都会使用新的大小调用malloc
,然后将所有数据从堆中的旧位置克隆到新位置,是这样吗?Rust 是如何确定要分配的新大小的策略呢?
例如,是否像这样每次向向量推送元素时就进行分配?
[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
etc...
看起来这很低效。也许Rust可以像这样做:
[]
[0, <empty>]
[0, 1]
[0, 1, 2, <empty>, <empty>, <empty>, <empty>, <empty>]
[0, 1, 2, 3, <empty>, <empty>, <empty>, <empty>]
[0, 1, 2, 3, 4, <empty>, <empty>, <empty>]
etc...