创建可以无限增长的动态列表属性的内存高效方法

Memory efficient way to create a dynamic-list attribute that can grow indefinitely

我需要制作一个拥有可以无限增长的列表的对象。列表中的项目是由基本类型组成的结构。

所以,我想知道如果它增长太多,使用向量是否会导致内存碎片。如果是这样,我应该改用什么?

指向向量的指针是否足够?我不知道如果向量存储在对象之外,内存碎片是否会不那么重要。

来自评论:

n the biggest test case I have, the mother object with the biggest list has 10000 elements. However, there are 23000 mother objects in that case. So, we could speak of a total of 230,000,000 "basic structs" as maximum, given there are not bigger cases than this.

使用向量。

当您需要的最大连续内存数组包含大约 10000 个元素(假设每个元素 30 个字节,即 300kB)时,您不必担心内存碎片。今天的内存模型已经足够高效了,它们可以管理几千字节的连续内存。如果您想了解更多关于内存碎片的信息,here's a question about it.

事实上你可以有很多 "mother objects" 并不重要,因为它们不需要在内存中连续。

如果您想更深入地挖掘,您还可以阅读有关双端队列的内容。

除非序列非常大,否则应该不会有太大区别,但是向量使用连续内存,因此它们不会导致碎片,而如果你用列表来做,它会要求 space 在内存的不同部分, 最终可能导致碎片化。