Vec

2 文章

动态分配和容器

4 分钟

C 里动态分配通常从这几个函数开始:

void *p = malloc(size);
p = realloc(p, new_size);
free(p);

Rust 普通代码很少直接调用分配器。更常见的是用拥有类型表达“这块内存归谁管”:

Box<T>     -> 堆上的一个 T
Vec<T>     -> 堆上的连续可增长数组
String     -> 堆上的可增长 UTF-8 文本

这些类型内部当然会分配和释放内存,但调用方通常不写 free。值离开作用域时,释放由类型的 Drop 完成。

阅读更多

buffer、slice 和 Vec

4 分钟

C 里表示一段二进制数据,最常见的形态是指针加长度:

int parse_packet(const uint8_t *buf, size_t len);

这套写法很灵活,也很危险。buf 是否为空、len 是否可信、函数会不会修改数据、会不会保存这个指针、调用方什么时候释放内存,都不在类型里,只能靠约定、注释和经验。

阅读更多