c++ - std::vector 是否比 std::list 更容易失败(STL 容器)

标签 c++ stl

我理解 vector 和列表之间关于它们的常见操作的复杂性的区别。但是假设我们需要处理非常大的列表或 vector (即数百万个元素),我们可以说在使用 vector 时内存分配更有可能失败吗?

据我所知,在处理 vector 时,元素是连续存储的。这意味着需要分配一大块内存来存储所有元素,这在堆碎片化的情况下似乎更有可能失败。

另一方面,使用列表时不会分配大内存块;元素不是连续存储的。

最佳答案

在某些情况下,std::liststd::vector 更有可能继续工作。最直接的一个是当应用程序有大量内存碎片时。本质上,当分配分布在虚拟内存地址空间中时。这导致可用内存量与最大连续内存块之间存在较大差距。在这种情况下,包含大量元素的 std::vector 比包含相同数量元素的 std::list 更有可能失败。

然而,这不是我盲目做出决定的依据。如果有问题的应用程序存在内存碎片并且影响了我使用 std::vector 的能力,那么我会考虑跳转到 std::list。但一开始我会选择我觉得最适合我需要的任何系列。

关于c++ - std::vector 是否比 std::list 更容易失败(STL 容器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772278/

相关文章:

c++ - "*ptrInt++"是做什么的?

c++ - 全局对象与单例模式

c++ - 双端队列 - 为什么 "reserve"不存在?

c++ - 检查 STL 容器中元素的类型 - C++

c++ - 从 `const char*[2]` 转换为 pair<string,string>

C++ 优先级队列 vector/列表?

c++ - 分配器作为 vector 和列表中的默认参数

python - 使用 Pybind11 包装 STL 容器返回类型

c++ - 光不断覆盖旋转立方体的 2 个相同面

c++ - 是否有将 -U__STRICT_ANSI__ 添加到 XCode build设置的正确位置?