C++;比它的C等价物慢的代码? < > C++程序语言中有哪些方面比已知的C语言慢?显然,这将排除OO特性,如虚拟函数和vtable特性等 我想知道,当你在一个等待关键区域(你不担心OO特性)编程时,你是否可以坚持基本的C++或者C会更好? < P>没有任何C语言或C++语言标准指定任何构造的速度。(C++确实指定了应用于容器的某些操作的时间复杂性,但这超出了您的问题范围)。为给定构造生成代码的速度取决于用于编译该构造的编译器及其运行的系统 对于一个给定的代码结构,它是有效的C和有效的C++,具有相同的语义,没有任何根本原因可以解释为什么两者都应该比另一个更快。但是如果编译器的开发人员更聪明,那么一个可能会比另一个更快。一切都必须在可预测的时间内运行

C++;比它的C等价物慢的代码? < > C++程序语言中有哪些方面比已知的C语言慢?显然,这将排除OO特性,如虚拟函数和vtable特性等 我想知道,当你在一个等待关键区域(你不担心OO特性)编程时,你是否可以坚持基本的C++或者C会更好? < P>没有任何C语言或C++语言标准指定任何构造的速度。(C++确实指定了应用于容器的某些操作的时间复杂性,但这超出了您的问题范围)。为给定构造生成代码的速度取决于用于编译该构造的编译器及其运行的系统 对于一个给定的代码结构,它是有效的C和有效的C++,具有相同的语义,没有任何根本原因可以解释为什么两者都应该比另一个更快。但是如果编译器的开发人员更聪明,那么一个可能会比另一个更快。一切都必须在可预测的时间内运行,c++,c,performance,latency,C++,C,Performance,Latency,如果是第二种情况,那么只有new、delete和try/catch在可预测的时间内无法运行。在嵌入式编程中,有一些指令可以避免此类调用。在其他情况下,尤其是在C++11中,您可能会注意到有些东西更快(std::sort比C的sort()更快)有些则稍慢一些 但是C++ C++中的C++是更高的抽象级别,而不是C风格的bug(如典型的 MalCube()>代码>没有对应的()(/CODE) < P>这取决于你所说的“等价”。如果比较C的STIDO.H和C++的IoSoSH,STDIO。H操作一般更

如果是第二种情况,那么只有
new
delete
try/catch
在可预测的时间内无法运行。在嵌入式编程中,有一些指令可以避免此类调用。在其他情况下,尤其是在C++11中,您可能会注意到有些东西更快(std::sort比C的sort()更快)有些则稍慢一些


但是C++ C++中的C++是更高的抽象级别,而不是C风格的bug(如典型的<代码> MalCube()>代码>没有对应的<代码>()(/CODE)

< P>这取决于你所说的“等价”。如果比较C的STIDO.H和C++的IoSoSH,STDIO。H操作一般更快。(在某些情况下速度要快一些)但是如果你在C++ C++的子集中编写代码,也被编译为有效C,生成的机器代码可能是相同的。

< P>与许多C程序员所想的相反,人们可以在C++中编写更紧凑和更快的代码,而不必在设计上牺牲大量的内容。
< C++ >中的任何东西都不能比C中的任何东西慢。C/++中没有代码,C++中的直接等价物是更快的,或者说,实际上是更可维护的。

< p>一个例子,C++缺少关键字<代码>限制< /代码>。正确地使用,有时允许编译器产生更快的C。颂歌

  • 在实践中很少看到
    restrict
    带来的好处,但事实确实如此
  • <> LI>当C++或C编译器可以推断(内联)后,<>代码>限制< <代码> >的应用条件,并相应地执行,即使关键字不被使用,
  • 同时也是C编译器的C++编译器可能会提供
    restrict
    \u restrict
    作为扩展
但偶尔(或在某些领域很常见)<>代码>限制是一个很好的优化,我知道这也是使用FORTRAN的原因之一。这肯定是C和C++中严格混叠规则的原因之一,它给出了与更为有限的情况下的“代码>限制/代码>相同的优化机会。

你是否“计数”取决于你认为“等效代码”的程度。<代码>限制< /代码>永远不会改变使用它的程序的意义——编译器可以自由地忽略它。因此,它不是用来描述使用它的程序(对于C编译器的眼睛)和不(C++)为“等效”的程序。.带有

restrict
的版本需要程序员付出更多(也许只是稍微多一点)的努力才能创建,因为程序员在使用它之前必须确保它是正确的

如果你的意思是,有一个程序是有效的C和有效的C++,并且在两个方面都有相同的含义,但是实现方式在某种程度上受到C++标准的限制,而不是C实现,那么我很肯定答案是“否”。如果你的意思是,在标准C中有潜在的性能调整,而不是标准C++,那么答案是“是”。

你是否能从Twitter中得到任何好处,是否你在两种语言中使用不同的优化得到相同的工作量,这是另一回事,是否有任何好处足以让你的语言选择成为基础。C和C++之间的交互操作很容易。代码,因此如果你有任何理由喜欢C++,那么就像任何改变你的首选编码方式的优化,切换到C通常是当你的分析器告诉你的函数太慢而不是以前时你会做的事情。 此外,我还试图说服自己,假设您从未使用过任何具有非平凡析构函数的类型,那么异常的可能性是否会影响性能。我怀疑在实践中它可能会这样做(这与“不使用就不付费”原则相矛盾)如果没有别的原因,GCC就没有代码< > fNO异常< /code >。C++实现使成本降低了(而且主要是在RODATA中,而不是代码),但这并不意味着它是零。延迟关键代码可能是也可能不是二进制大小的关键代码。 同样,这可能取决于你所说的“等效”代码——如果我必须用非标准编译器(例如,代码> G++-FNO异常< /CUT>)编译所谓的“标准C++程序”,以便“证明”C++代码和C一样好,那么在某种意义上C++标准会给我带来一些东西。 <>最后,C++运行时本身有一个启动成本,它不一定与C Runt相同。