【问题标题】:Using C++ for performance intense applications? [closed]将 C++ 用于性能密集型应用程序? [关闭]
【发布时间】:2013-12-24 07:33:06
【问题描述】:

使用 c++ 进行密集计算是否明智,例如数百万个循环、数百万个数组项等?

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

这个应用程序的执行速度会比用 C 编写的相同吗?

如您所知,编写 C++ 更方便(您不必定义所有内容,支持更多库,如果需要,您可以使用速度慢但节省工作量的函数)。

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

【问题讨论】:

  • “出于性能原因,在 C++ 程序中仅使用 C 函数是个好主意吗?”不,这是个坏主意。为什么?因为您可能会看到非常小的性能差异(如果有的话)。除非您编写糟糕的 C 或 C++。但那是你的错,不是语言的错。
  • @Blazer:您选择的语言并没有神奇地让这更快。正是您对其进行编程的方式使其变得更快。选择你想要的任何语言,然后好好编程。您对其编程的方式将比您选择的实际语言产生远远更多的影响。
  • @Blazer 在 c++ 中使用 std::vector 与在 c 中使用数组相同!
  • 你一直在相信一个谬论,但我认为这里没有人能够说服你这样......
  • @Spook:您在 C# 中的数组只有 1k 个元素,但在 C++ 中是 10k。这不公平!

标签: c++ c performance


【解决方案1】:

将 C++ 用于高性能代码并不是一个坏主意。提高性能的主要方法应该是选择有效的数据结构和算法,并辅以良好的性能分析工具,以发现意外热点并分析代码行为。

【讨论】:

  • +1 用于提及分析工具。
【解决方案2】:

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

-Loops 不太依赖于编程语言,它更多地依赖于 CPU。 CPU 具有循环预测功能,使 Loop 执行得更快。

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

【讨论】:

  • 使用类本身并不需要虚拟调度。只有虚函数需要。
  • 类并不总是使用虚拟调度。如果他们这样做了,那么无论如何你都必须在 C 中或多或少地做同样的事情(除非你决定对程序进行不同的架构,在这种情况下,为什么不在 C++ 中也进行不同的架构呢?)。
【解决方案3】:

一般来说,为性能而编写的 C++ 程序至少与类似的 C 程序一样好。与 qsortbsearch 等 C 等效项相比,模板通过更多的编译时间优化(内联、消除死代码等)促进代码重用可能会更好。 C++ 库提供了诸如 std::unordered_mapstd::sort 之类的东西,使 C++ 程序可以轻松利用高效的数据结构和算法,而 C 程序可能会更频繁地坚持使用数组和蛮力算法。

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

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

【讨论】:

    【解决方案4】:

    C 确实非常适合高要求的计算。但是,我不确定您会看到与 C++ 相比有多大的不同。如果你有性能问题,你应该主要专注于寻找快速算法而不是尝试低级program optimizations。编译器可以比你做得更好。特别是对于这个SPOJ problem,即使是编写良好、高度优化的代码,朴素算法也会超时。 “聪明”的算法(即使写得不好)至少快 10 倍。

    此外,您可以尝试查看是否可以并行执行计算。然后,您可以尝试将GPGPU 与:

    1. CUDA
    2. OpenCL
    3. OpenGL compute shaders

    在这些情况下,C 和 C++ 是强制性的。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2011-03-03
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多