C++ libc与x2B之间的性能比较+;和libstdc++;在Linux上
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使用发行版默认版本以外的较新版本却有点困难。这是可以做到的,但我还没有找到任何非难看的
clang
,因为Linux上的libc++
仅适用于clang
libc++
在Linux上的功能不完整(exception\u ptr
尚未实现,但我并不担心)。另一方面,它比libstdc++有更多的C++11/14特性。较新版本的libstdc++
确实提供了更多的支持(例如,GCC4.9中的regex
),但要求clang
使用发行版默认版本以外的较新版本却有点困难。这是可以做到的,但我还没有找到任何非难看的解决方案
< >很容易将新的GCC安装在一个自定义位置,并构建可执行文件以链接到新的代码> LIbSTDC++< /COD>,但是我不知道如何在运行时选择执行库来选择新的库,而不将新的库注入到libc++
(更好的C++11/14支持,而不影响系统可执行文件,旧的libstdc++
仅链接用于ABI支持)的主要原因。然而,我关心的是它的表现。我喜欢在性能比较中看到一些东西(另一个原因是我发现报告libc++
的bug要容易得多。当bug发生时,阅读libc++
的源代码是非常愉快的,编码非常简洁,而阅读libstdc++
的源代码时,我发现我比平常更迷路了):
- STL容器,主要是向量、性能(
、resize
,等等,有时它们是无法避免的)push_-back
- 数字库,主要是
(
是不相关的,我相信这两个库没有区别,因为它只是依赖于系统
,而libm在Linux上非常慢而且过时,而且我也不使用libm
的数学库)glibc
,
,std::copy
等等。同样,有时候你无法避免它们(主要是当你想提供的接口是通用的,你不想专门化每个函数,让指针显式调用std::fill
等等)。因此,最好了解库在这些函数上的性能(例如,实现的开销是否足够低,这样编译器就可以看到正在发生的事情,从而只能对指针执行某些优化。我认为这还取决于STL对迭代器的实现)memset
std::string
?