我理解 vector 和列表之间关于它们的常见操作的复杂性的区别。但是假设我们需要处理非常大的列表或 vector (即数百万个元素),我们可以说在使用 vector 时内存分配更有可能失败吗?
据我所知,在处理 vector 时,元素是连续存储的。这意味着需要分配一大块内存来存储所有元素,这在堆碎片化的情况下似乎更有可能失败。
另一方面,使用列表时不会分配大内存块;元素不是连续存储的。
最佳答案
在某些情况下,std::list
比 std::vector
更有可能继续工作。最直接的一个是当应用程序有大量内存碎片时。本质上,当分配分布在虚拟内存地址空间中时。这导致可用内存量与最大连续内存块之间存在较大差距。在这种情况下,包含大量元素的 std::vector
比包含相同数量元素的 std::list
更有可能失败。
然而,这不是我盲目做出决定的依据。如果有问题的应用程序存在内存碎片并且影响了我使用 std::vector
的能力,那么我会考虑跳转到 std::list
。但一开始我会选择我觉得最适合我需要的任何系列。
关于c++ - std::vector 是否比 std::list 更容易失败(STL 容器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772278/