据说Blitz++提供了接近Fortran的性能。
实际上,Fortran在执行相同任务时是否确实比普通的C++更快?
那其他运行时性能卓越的高级语言呢?我听说有一些语言在某些任务上超过了C++,比如Objective Caml、Java和D等。
我猜垃圾回收可以使很多代码更快,因为它消除了在堆栈中频繁复制数据的必要性(假设代码不是为了性能而编写)。
我只是出于好奇询问——我一直以为除非经过专家级的汇编编程,否则C++几乎无法被击败。
据说Blitz++提供了接近Fortran的性能。
实际上,Fortran在执行相同任务时是否确实比普通的C++更快?
那其他运行时性能卓越的高级语言呢?我听说有一些语言在某些任务上超过了C++,比如Objective Caml、Java和D等。
我猜垃圾回收可以使很多代码更快,因为它消除了在堆栈中频繁复制数据的必要性(假设代码不是为了性能而编写)。
我只是出于好奇询问——我一直以为除非经过专家级的汇编编程,否则C++几乎无法被击败。
对于纯数值代码,Fortran比C++更快且几乎总是更好。 Fortran之所以更快有很多原因。它是最古老的编译语言(有很多关于优化编译器的知识)。 它仍然是数值计算的语言,因此许多编译器供应商靠销售优化编译器谋生。 还有其他更技术性的原因。 Fortran(至少Fortran77)没有指针,因此在该领域不会遇到C / C ++语言的别名问题。 许多高性能库仍然使用Fortran编写,并有着悠久的历史(> 30年)。 C或C ++都没有好的数组构造(C太低级,C ++具有与地球上编译器数量相同的数组库,这些库彼此不兼容,从而阻止了一堆经过充分测试和快速代码的池子)。
关于Fortran是否比C++更快这个问题存在争议。有些人说是,有些人说否;我不会深入讨论这个问题。它取决于编译器、你运行它的架构、算法的实现等等。
Fortran相对于C具有很大的优势,那就是它所需的算法实现时间较短。因此,它非常适合进行任何类型的数值计算。我将仅列举一些与C相比明显的优势:
**
)(天哪,谁想到使用幂函数?而不是用一个运算符?!)A(1,2)
暂时想不到其他的了,就这些吧。
由于语言实现数组的方式不同,FORTRAN在数组处理方面通常比C ++更快 - FORTRAN不允许数组元素的别名,而C ++则允许。这使得FORTRAN编译器的工作更加容易。此外,FORTRAN拥有许多非常成熟的数学库,这些库已经存在了近50年 - C ++还没有存在那么长时间!
你可能在加载此页面时使用了一些奇怪的托管XML解析器。 :)
我们不断地针对代码进行性能分析,而且收益一直很稳定(这不是幼稚的C++,只是带有boost库的现代C++)。它比任何CLR实现都至少快2倍,经常快5倍甚至更多。比Java时代好多了,那时候快20倍,但你仍然可以找到优秀的实例,并消除所有的System.Object膨胀,将其打得毫无还手之力。
托管开发人员不明白的一件事是,硬件架构不支持VM和对象根方法的任何扩展。你必须亲眼看到才会相信,等等,启动一个浏览器并转到像Silverlight这样的“轻量级”VM。你会惊讶地发现它有多慢,需要大量CPU资源。
第二点,开发任何性能应用程序时,请使用本机数据库而非托管数据库。
C#比C++快得多 - 在C#中,我可以在十分之一的时间内编写XML解析器和数据处理器,而在C++中则需要更长的时间。
哦,你是指执行速度吗?
即使考虑从编写第一行代码到第一次执行代码结束所需的时间,C#仍然可能比C++更快。
这是一篇非常有趣的文章,讲述了将C++程序转换为C#并使C++比C#更快所需的努力。
因此,如果考虑开发速度,几乎任何东西都能击败C++。
好的,针对OP的运行时性能要求: 不是语言本身,而是语言的实现决定了运行时性能。我可以编写一个生成最慢代码的C++编译器,但它仍然是C++。理论上也可以编写一个针对IA32指令而不是Java VM字节码的Java编译器,从而提高运行时速度。
您的代码性能将取决于语言的优势与代码的要求之间的匹配。例如,一个进行大量内存分配/释放的程序在一个天真的C++程序中(即使用默认内存分配器)中表现不佳,因为C++的内存分配策略过于泛化,而C#的基于GC的分配器可以更好地执行(如上面的链接所示)。字符串操作在C++中很慢,但在像php、perl等语言中很快。在实际应用中,D有时比C++更快,这在很大程度上是因为垃圾回收的存在帮助避免了使用智能指针时RAII和引用计数的开销。对于分配大量具有非平凡生命周期的小对象的程序,垃圾回收可能比C++风格的内存管理更快。此外,D的内置数组允许编译器在某些情况下执行更好的优化,而C++的STL向量则不被编译器所理解。此外,D2支持不可变数据和纯函数注释,最近版本的DMD2基于此进行了优化。D的创造者Walter Bright在D和C++中都编写了JavaScript解释器,据他说,D版本更快。