【发布时间】:2014-05-18 05:11:59
【问题描述】:
我刚刚观看了 Herb Sutter 关于各种 STL 容器性能的演示(请参阅 http://channel9.msdn.com/Events/Build/2014/2-661 上的第 46 分钟)。看起来std::vector 比std::list 更快,即使是在中间插入,这看起来像是一个很大的NO-NO 首先......他的解释是这是因为std::vector 中的连续内存分配而发生的,并且因为线性横向似乎超级快。我现在很好奇,有没有人在实际代码中观察到两者之间的明显性能差异?我不是专业程序员,我只是在笔记本电脑上测试了一个简单的例子,似乎std::vector 的插入速度确实比std::list 快。不过这似乎有点奇怪......我想了解为什么向量在 STL 实现中更快,
【问题讨论】:
-
你到底在哪里插入?如果您向我们展示您的基准程序,它会更容易解释。
-
不,我的意思是你在列表的前面插入?在后面?在随机位置?正好在中间?
-
在
size()/2,所以在中间,这就是为什么我很困惑...... -
如果没有您的平台、编译器、优化级别、元素类型的详细信息,这个问题完全没有意义......
-
std::list和其他基于节点的容器的一个重要问题是缓存使用率低。现代处理器的速度比内存快得多,以至于数据访问组织不当会导致 CPU 花费更多时间等待而不是做有用的工作。
标签: c++ performance c++11 vector stl