使用C ++进行性能密集的应用程序?

时间:2013-12-24 07:33:07

标签: c++ c performance

使用c ++进行密集计算是明智的,例如数百万个循环,数组中有数百万个项目等吗?

更具体地说,出于性能原因,在C ++程序中使用 C函数是一个好主意吗?

此应用程序的执行速度是否会比用C编写的速度慢?

如您所知,编写C ++更方便(您不必定义所有内容,支持更多库,如果需要,您可以使用缓慢但省力的功能)。

此网站:http://benchmarksgame.alioth.debian.org/u64q/c.php让人相信C更快。

4 个答案:

答案 0 :(得分:1)

将C ++用于高性能代码并不是一个坏主意。您的主要性能方法应该是选择有效的数据结构和算法,并在良好的性能分析工具的支持下找到意外的热点并分析代码的行为。

答案 1 :(得分:0)

这个问题的答案有不同的答案。请考虑以下情况:

-Loops不依赖于编程语言那么多,它更依赖于CPU。 CPU有循环预测,使循环执行得更快。

- 如果您使用的是类,那么由于虚拟调度,它会更慢。然而,从软件工程的角度来看,计算机变得越来越快,我们的程序员并不是如此抽象,这是我们提高编码效率的唯一工具。

答案 2 :(得分:0)

通常,为性能而编写的C ++程序至少与类似的C程序一样好。它可能更好,因为模板有助于代码重用,具有更多的编译时间优化(内联,消除死代码等),而不是像qsortbsearch这样的C等价物。 C ++库提供了std::unordered_mapstd::sort之类的东西,使C ++程序可以轻松利用高效的数据结构和算法,而C程序可能会更频繁地使用数组和强力算法。

如果C ++程序使用具有更高开销的库,或者结构不同(例如使用OO和大量虚拟调度),那么C ++程序可能最终会变慢。从历史上看,许多人报告C ++ I / O流明显比C库替代方案慢,但它们在荣誉区域设置和维护某些状态方面做得更多,现代实现对于某些操作可能更快。

对于不涉及复杂库的原始类型,循环,函数调用等操作,通常没有性能差异。

答案 3 :(得分:0)

对于高要求的计算来说,C确实很棒。但是,与C ++相比,我不确定您会看到多少差异。如果遇到性能问题,您应该主要关注寻找快速算法而不是尝试低级program optimizations。编译器可以比你做得更好。特别是,对于这个SPOJ problem,即使是编写良好,高度优化的代码,这种天真的算法也会超时。 “聪明”的算法(写得很差)至少要快10倍。

此外,您可能会尝试查看是否可以并行执行计算。然后,您可以尝试使用GPGPU

  1. CUDA
  2. OpenCL
  3. OpenGL compute shaders
  4. 在这些情况下,C和C ++是强制性的。