use*_*112 16 c++ performance boost stl
为另一个互联网论坛引用道歉,但我认为这很有趣,并想问:
如果你放弃编程语言的"安全"功能并避免像STL和Boost这样的东西,C++会更快.在原始字节到字节中,C++更快,但是C再也是如此.
当你添加STL的行李,Boost你比编写好的C#代码慢.C#JIT和Java jit的优点是这些安全功能得到了很好的优化.C++安全功能依赖于编译器的优化.
因此,如果您对STL和Boost代码不小心,那么您将拥有应用程序的跛脚.
我同意消除安全功能,但我看过很多高频工作广告,他们都要求Boost体验.当然,Boost对于生成快速代码不是一件坏事吗?或者这个人仅仅在理论上说明如果你只是在字节级操作它会更快?
编辑:引用是关于STL和Boost,因此我添加了STL标记.
jus*_*tin 23
没有
boost和C++标准库用于生成极快的生产实现.当然,可以在特定场景中改进这些实现- 这类似于在知道执行与通用分配器有何不同以及如何针对该用法进行优化时编写自己的分配器.因此,当然可以分析问题并生成比通用实现(或增强)更快的优化实现.
当然,任何库也可能被滥用,这可能导致执行受损.缺点是boost(大量库)实现是快速实现的一个很好的起点.如果您需要它比增强更快,请确定问题并改进它.
许多C++开发人员都关注性能; 一般来说,比其他语言更多.boost通常被认可,同行评审,并且实现用于测试和形成标准库特征的基础.
感谢 Justin让我在封闭的问题上分享他的答案: - 赛斯
恰恰相反.
提升与安全带无关.
Boost是关于高级软件组件,具有高级抽象性.这避免了其他框架/库1中常见的"库锁定" .
例如,您的Boost图库也不会要求你在所有交换机的数据结构:您可以使用/调整,对于您的应用程序执行以及任何数据结构.在最坏的情况下,您可能必须编写一个特征类来帮助Boost进行解释; 正是这种特性(现代模板库通用)使得Boost 在实践中表现得与其他任何东西一样:库阻抗不匹配的程度不会太大.这与C++ 11关于线程和移动语义的新概念直接相符:即使是最基本的数据复制案例也是如此.
此外,所有这些库都尊重您自己的分配器实现,从而实现无法超越的内存管理性能.您可以对齐在C#中的128位INT载体-但你必须经过很多很多箍跳2,不存在是没有办法,你可以永远做它的框架API的工作.
在C++中,你只需为你所使用的东西付费,而Boost完全就是那种精神.
嗯,我想我还没有充分强调这一点,但我现在已经完成了.
让我从另一方面看一下:在C#中编写高性能代码要困难得多,因为很难看到幕后发生了什么.
一旦你落后于幕后(不安全模式,IL代码)你可能会比在C++中安全得多,因为在C++中有一个透明的政策,说明在何处以及如何发生.在C#中你甚至不能相信
int*你之前的一行(因为垃圾收集器可能已经移动了你的奶酪); 没有人知道编译器和/或JIT引擎会对您的通用代码3做出什么.简而言之:您可以在任何地方编写错误代码,但Boost不能归咎于此.STL只能归咎于疯狂的原始表现4.
1 PoCo,Qt,MFC,WTL,等等....
2 单声道SIMD
3包括许多接近可怜的领域,并且在很大程度上违反了"最少惊喜原则"(例如
,当博客重新上线时)4这
std::copy将在基于SSE4,MOVSW的最佳实现中静态翻译,或者仅仅是钱可以购买的简单memcpy,但你甚至不必写一个不同于复制aistream到a 的单个字母set,可以这么说.
| 归档时间: |
|
| 查看次数: |
11017 次 |
| 最近记录: |