STL /标准C++容器的效率如何?

use*_*112 1 c c++ boost stl

我在SO上阅读这篇文章:

/sf/answers/222852521/

这是对C++和C#之间性能问题的回答.这张海报来自高频交易背景,并说由于寻求纳秒节省,他编写了自己的HF工作类库.在他的帖子中,他提到他使用的C++ STL很少 - 这让我感到惊讶.

我的问题是 - C++ STL在性能方面是否已完全优化,还是仅针对普通用户进行了优化?将C中的本机数组周围的一些函数包装起来比使用Vector还是List更快?是否有任何容器内有更好的性能?

我很欣赏这些课程对99%的用户来说足够快 - 但我的问题是针对其他1%的用法.

Die*_*ühl 6

这个问题不会得到任何答案,说明"STL是最优的"有很多原因:

  1. 至少有六个STL的实现在那里,肯定有一些没有优化,而其他优化(但请参阅下一个项目).
  2. 您做的大多数优化都会对使用模式做出假设,并且会对某些使用模式产生悲观.要真正针对特定用例进行优化,需要了解如何使用某些内容.
  3. 大多数STL用户以某种形式滥用组件,并且只有C++ 2011才真正支持某些正确的用途(例如,使用本地自定义分配器).
  4. 当人们谈论STL时,他们通常会参考带算法的示例容器.虽然有用,但STL的重点是算法,这些算法具有更好的优化机会.毕竟,STL的重点在于您可以随意使用自定义创建容器的算法!为什么要打扰优化容器?但请注意,项目1到3也适用于算法.
  5. STL具有良好的抽象性,但并不完全"存在".特别是,当组合多个算法时,存在比单独应用算法更好的方法,但STL接口并不真正支持这一点.

总而言之,需要花费相当多的精力来提出比典型的优化STL实现更好的东西.我会质疑任何人std::vector<T, A>在一天内写下一个替代品的断言,并声称对于典型用例更快std::vector<T, A>(参考C++ 2011版本,其中可以明智地使用分配器).