我需要创建一个拥有可以无限增长的列表的对象。列表中的项目是由基本类型组成的结构。
所以,我想知道如果它增长太多,使用向量是否会导致内存碎片。如果是这样,我应该改用什么?
指向向量的指针就足够了吗?我不知道如果向量存储在对象之外,内存碎片是否会变得不那么重要。
我需要创建一个拥有可以无限增长的列表的对象。列表中的项目是由基本类型组成的结构。
所以,我想知道如果它增长太多,使用向量是否会导致内存碎片。如果是这样,我应该改用什么?
指向向量的指针就足够了吗?我不知道如果向量存储在对象之外,内存碎片是否会变得不那么重要。
从评论:
在我拥有的最大测试用例中,列表最大的母对象有 10000 个元素。但是,在这种情况下,有 23000 个母对象。因此,考虑到没有比这更大的情况,我们最多可以说总共有 230,000,000 个“基本结构”。
使用向量。
当您需要的最大连续内存数组包含大约 10000 个元素(假设每个元素 30 个字节,这意味着 300kB)时,您不必担心内存碎片。今天的内存模型足够高效,它们可以管理几千字节的连续内存。如果你想了解更多关于内存碎片的信息,这里有一个关于它的问题。
您可以拥有很多“母对象”这一事实并不重要,因为它们不需要在内存中是连续的。
如果您想更深入地研究,您还可以阅读有关 deques 的信息。
除非序列非常大,否则它不应该有很大的不同,但是向量使用连续的内存,所以它们不会导致碎片,而如果你用一个列表来做,它将在不同部分请求空间记忆,女巫最终可能导致支离破碎。