memory-management - 在不调整数组大小的情况下填充任意大小的向量的惯用方法?

标签 memory-management rust memory-pool

有时您想要分配数据,但事先并不知道您需要多少数据。

大多数情况下向量都很好,但有时分配内存块链并根据需要创建新 block 会更有效。

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

虽然这可以在 Rust 中使用 VecLinkedList 来完成,但是否有更惯用的方法来执行此任务?

最佳答案

实际上,我更喜欢 Vec<Vec<T>>在这种情况下,这类似于 std::deque是在 C++ 中实现的。

Vec<Vec<T>>所有内部Vec<T>具有相同的最大尺寸,除了第一个和最后一个 Vec<T>满满当当,您可以拥有 O(1) 索引内存稳定性。

当然,指向 block 的指针将随着外部 Vec 移动。重新分配和所有,但一个memcpy 24 个字节就足够了。

关于memory-management - 在不调整数组大小的情况下填充任意大小的向量的惯用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39187602/

相关文章:

rust - 我怎样才能得到一个元组的长度?

java - 转换在 Java 中需要多少处理和内存使用?

c++ - 我怎样才能知道 C++ 类的一个实例消耗了多少内存?

rust - 如何在 'Option' 中多次访问向量?

for-loop - Rust 中 for 循环的确切定义是什么?

c - 如何将malloc内存划分为c中的 block

c++ - 基于文件的内存池——这可能吗?

c++ - 如果内存池比malloc快,为什么malloc不能在幕后使用它们?

memory-management - SystemCache 和 MemoryInUse - 谁能解释这种行为?

objective-c - 复制是否也转移保留计数?