在没有数组大小调整的情况下填充任意大小的矢量的惯用方法?

时间:2016-08-28 02:52:50

标签: memory-management rust memory-pool

有些时候你想要在不知道你需要多少数据的情况下分配数据。

大多数情况下,矢量都很好,但有时候分配一系列内存块会更有效,并根据需要创建新的块。

如果您不需要通过索引直接访问它们(例如仅弹出最后一项),则可以将它们保存为内存块。否则,一旦完成,就可以分配固定大小的矢量并将数据复制到其中。

虽然可以在Rust中使用LinkedList Vec来完成此操作,但还是有更惯用的方式来执行此任务吗?

1 个答案:

答案 0 :(得分:3)

实际上,我倾向于在这种情况下使用Vec<Vec<T>>,这类似于std::deque在C ++中实现的方式。

使用Vec<Vec<T>>所有内部Vec<T>具有相同的最大大小,除了第一个和最后一个Vec<T>以外的所有内容都满了,您可以使用O(1)索引内存稳定性。

当然,当外部Vec重新分配时,指向块的指针会移动,但是24个字节的memcpy很容易。