【发布时间】:2021-12-23 10:42:53
【问题描述】:
我需要动态分配的数组,所以我需要一个内存池来有效地执行此操作。我找到了https://github.com/fitzgen/bumpalo,但它看起来不支持分配直接数组。我应该像这样分配一个向量:
use bumpalo::{Bump, collections::Vec};
let bump = Bump::new();
let mut v = Vec::new_in(&bump);
每次我需要时都得到它的切片?
问题是我无法强制矢量具有我想要的确切大小。我的数组始终具有固定大小(但大小在运行时确定)。我认为 Vec 适合体积变大的东西。
【问题讨论】:
-
如果你的数组总是有一个固定的大小,你不能用数组代替向量吗?
let v = bump.alloc([ElemType::default(); SIZE]) -
@user4815162342 我的意思是它是不变的意思是我不需要在完成后调整它的大小,但是大小是在运行时确定的,所以这样做是不可能的
-
您始终可以将
Vec包装在不允许大小更改的自定义结构中。 -
@Lagerbaer 是的,但这不是重点。我想为这些分配使用一个内存池,以便它回收东西
-
等一下...... “我想为这些分配使用内存池,以便它回收东西” -
bumpalo::Bump名义上是 bump allocator,它由 -设计不能重用释放的内存。 “凹凸分配的缺点是没有通用的方法来释放单个对象或为不再使用的对象回收内存区域。” - bumpalo readme。它似乎不适合回收内存池,至少在没有大量工作和计划的情况下并非如此。
标签: memory memory-management rust