#box #map #allocation #re-using

map_box

在Box中映射值,尽可能重用分配

1个不稳定版本

0.2.2 2024年2月2日
0.2.1 2024年2月2日
0.2.0 2024年2月2日
0.1.1 2024年2月2日
0.1.0 2024年2月2日

#276内存管理

每月 21 次下载

MIT 许可证

8KB
136

Map Box

githubcrates-iodocs-rs

在Box中映射值,尽可能重用分配。

例如,以下代码不会重新分配。

use map_box::Map;

let b = Box::new(42u64);
let b = b.map_box(|v| v as i64);

map的签名是

impl<T1> Box<T1> {
    fn map_box<T2>(self, f: impl FnMut(T1) -> T2) -> Box<T2>;
}

限制

如果类型的对齐要求发生变化,即使对齐变得更低,Box也需要重新分配。这是因为

  1. alloc::dealloc要求布局与分配时相同的布局相同
  2. alloc::realloc只接受新的大小,不能将分配的布局向下更改

没有运行时依赖