代码之家  ›  专栏  ›  技术社区  ›  Laserallan

从Microsofts STL切换到STLport

  •  15
  • Laserallan  · 技术社区  · 15 年前

    在Windows下,我在性能关键的C++代码中使用了相当多的STL。获得额外性能的一种可能的“廉价”方法是使用更快的STL库。

    据此, post

    最近有人做过这样的改变吗?你的结果是什么?

    8 回复  |  直到 15 年前
        1
  •  15
  •   MattyT    15 年前

    我还没有将STLPort的性能与MSCVC进行比较,但是如果有 重要的 差别(当然,在发布模式下,调试版本可能会有很大的不同。)不幸的是,您提供的链接——以及我所看到的任何其他比较——对细节太过轻描淡写,没有什么用处。

    即使评测确实揭示了标准库容器或算法中的性能问题,我建议您首先进行分析 你是如何使用它们的 . 算法改进和适当的容器选择,特别是考虑到大O成本,是必要的 可能带来更高的绩效回报。

        2
  •  9
  •   Nemanja Trifunovic    15 年前

    在进行切换之前,请确保使用 checked iterators 关掉。出于某种奇怪的原因,即使在发布版本中,它们也会默认打开,这在性能方面会有很大的不同。

        3
  •  6
  •   user184968 user184968    14 年前

    我们最近做了相反的工作。我们的应用程序是一个跨平台的C++服务器程序,它是在VS 2008(x86)和HPX IA64和Linux上用GCC 4.3构建的。在每个平台上,我们都使用STLPort5.1.7作为STL库,并使用Boost1.38。

    为了比较一段时间前的性能,我们还构建了没有STLport的应用程序,之后我们测量了性能。

    在此之后,Windows上的性能略有提高。因此,我们选择停止在VS2008中使用STLport,而使用默认的VS2008STL库。

    在HP-UX ia64上,性能下降了20%。卡钳(HP-UX分析器)显示字符串分配需要更多的时间。在默认gcc STL库中的字符串赋值内部,有对pthread_mutex_unock的调用。据我所知,由于默认gcc的STL库使用COW字符串,所以使用了pthread_mutex_lock/pthread_mutex_unlock。在我们的应用程序中,我们做了大量的字符串赋值,而由于COW字符串,我们的性能会变得更差。因此,我们仍然在HP-UX和gcc上使用STLPort。

        4
  •  5
  •   Benoît photo_tom    15 年前

    我确实记得在进行此更改时收到一些警告,但没有什么不能快速解决的。作为一个缺点,我要补充的是,使用VisualStudio的调试器进行STLport调试比使用Microsoft的STL调试要难(更新:似乎有一种方法可以向调试器解释如何处理STLport容器,谢谢Jalf!)。

    最新版本可以追溯到2008年10月,因此仍有人在研究它。看见 here 谢谢下载。

        5
  •  5
  •   Nikola Smiljanić    14 年前

    • StlPort很少更新(据我所知,只有一个开发人员在使用它,您可以查看他们的提交 history
    • 无论何时切换到新的VisualStudio版本,构建它都会出现问题。您可以等待新的make文件,或者自己创建它,但有时由于使用了一些配置选项而无法构建它。然后你就等着他们来建造。
    • VisualStudio中的STL checked iterators debug iterator support 这比StlPort中的要好得多。这就是大部分减速的原因,尤其是在调试中。检查迭代器在调试和发布中都是启用的,这不是每个人都知道的(您必须自己禁用它们)。
    • VisualStudio2010中的STL使用来自C++0x的右值引用,这是获得真正性能优势的地方。
        6
  •  3
  •   Edouard A.    15 年前

        7
  •  0
  •   Stack Overflow is garbage    15 年前

    我还没有尝试过,但据我所知,微软的STL实现并没有重大改变。(VS2008编译器在2005年也没有重大的新优化)因此,如果STLPort当时更快,情况可能仍然如此。

    但这只是猜测。:) 如果你尝试了,一定要报告结果。

        8
  •  -3
  •   Rodyland    15 年前