【发布时间】:2013-03-24 05:30:26
【问题描述】:
我了解向量和列表之间关于它们的常见操作复杂性的区别。但是假设我们需要处理非常大的列表或向量(即数百万个元素),我们是否可以说在使用向量时内存分配更有可能失败?
AFAIK,当使用向量时,元素是连续存储的。这意味着需要分配一大块内存来存储所有元素,这在碎片堆的情况下似乎更有可能失败。
另一方面,使用列表时不会分配大块内存;元素不是连续存储的。
【问题讨论】:
-
“似乎”是一个神奇的词。多亏了现代(即 1990 年代后)计算机的虚拟内存架构,“几百万个元素”实际上不存在获取内存的问题。
-
我认为你已经找到了不同之处。
-
列表通常会为每个数据项添加两个指针,因此总体内存使用率高于向量。
-
阅读
std::deque。它像list一样不连续,使用更少的内存并允许随机访问。 -
这完全取决于您所说的 fail 是什么意思。
std::vector需要连续的内存(虚拟内存地址),但对于简单类型的内存比std::list少得多。使用std::list<int>比使用std::vector<int>更有可能耗尽内存