C++ libc与x2B之间的性能比较+;和libstdc++;在Linux上

C++ libc与x2B之间的性能比较+;和libstdc++;在Linux上,c++,c++11,stl,libstdc++,libc++,C++,C++11,Stl,Libstdc++,Libc++,Linux上的两个标准库之间是否有全面的性能比较 我找了很长时间,但什么也没找到 编译器将是clang,因为Linux上的libc++仅适用于clang libc++在Linux上的功能不完整(exception\u ptr尚未实现,但我并不担心)。另一方面,它比libstdc++有更多的C++11/14特性。较新版本的libstdc++确实提供了更多的支持(例如,GCC4.9中的regex),但要求clang使用发行版默认版本以外的较新版本却有点困难。这是可以做到的,但我还没有找到任何非难看的

Linux上的两个标准库之间是否有全面的性能比较

我找了很长时间,但什么也没找到

编译器将是
clang
,因为Linux上的
libc++
仅适用于
clang

libc++
在Linux上的功能不完整(
exception\u ptr
尚未实现,但我并不担心)。另一方面,它比libstdc++有更多的C++11/14特性。较新版本的
libstdc++
确实提供了更多的支持(例如,GCC4.9中的
regex
),但要求
clang
使用发行版默认版本以外的较新版本却有点困难。这是可以做到的,但我还没有找到任何非难看的解决方案

< >很容易将新的GCC安装在一个自定义位置,并构建可执行文件以链接到新的代码> LIbSTDC++< /COD>,但是我不知道如何在运行时选择执行库来选择新的库,而不将新的库注入到 LyLabValuyPosith中,这改变了使用C++的系统中的所有行为。code>RPATH是一种可能的解决方案,但我仍然认为它非常丑陋,而且,可能我弄错了,它还改变了相同可执行文件链接到的其他库的行为

以上是我想切换到
libc++
(更好的C++11/14支持,而不影响系统可执行文件,旧的
libstdc++
仅链接用于ABI支持)的主要原因。然而,我关心的是它的表现。我喜欢在性能比较中看到一些东西(另一个原因是我发现报告
libc++
的bug要容易得多。当bug发生时,阅读
libc++
的源代码是非常愉快的,编码非常简洁,而阅读
libstdc++
的源代码时,我发现我比平常更迷路了):

  • STL容器,主要是向量、性能(
    resize
    push_-back
    ,等等,有时它们是无法避免的)
  • 数字库,主要是
    是不相关的,我相信这两个库没有区别,因为它只是依赖于系统
    libm
    ,而libm在Linux上非常慢而且过时,而且我也不使用
    glibc
    的数学库)
  • std::copy
    std::fill
    等等。同样,有时候你无法避免它们(主要是当你想提供的接口是通用的,你不想专门化每个函数,让指针显式调用
    memset
    等等)。因此,最好了解库在这些函数上的性能(例如,实现的开销是否足够低,这样编译器就可以看到正在发生的事情,从而只能对指针执行某些优化。我认为这还取决于STL对迭代器的实现)

没有聚焦于
std::string