C比C ++明显更快

据我所知,所有的脚本语言和核心科学程序通常用C语言编写, 这使得实现混乱,但直接到了一个地步。

我知道这些人想要最大化他们的performance,但使用Cstring和C结构使用C ++类有真正的区别; 除了虚拟函数外,C ++似乎也是以相同的方式工作的,它会一次存储一个类函数,并且该类的每个实例都会调用这个函数。

是什么让C更快,是一个像python或sqlite这样的项目中的一个显着的差异,必须是最快的?

C ++通常用于科学计划。 C在这个领域的普及可能正在减退。 Fortran仍然是一种“低级”语言。

在C ++中,“你只需支付你使用的东西”。 所以没有任何东西可以比C慢。特别是对于科学程序,expression式模板可以使用模板引擎执行一些自定义优化来处理程序语义。

selectPython这样的项目的原因在于,很多人都比较了解Python,所以一个庞大的代码库不会混淆大量的贡献者。

SQLite有一个小的可执行代码大小的要求,其中C有轻微的优势。 明智地使用C ++仍然允许在embedded式应用程序中使用,但由于担心不必要的语言function会蔓延,

我不认为这个原因与性能和互操作性有很大关系。 C ++语言比C语言更为复杂,但从性能的angular度来看,两种方式都不应该有明显的差别。 一些C ++构造比C等效( std::sortqsort更快),并且可能有很好的例子。

编辑:在互操作性方面…

基本上,C ++标准没有定义一些可能需要的东西,以便在使用不同的编译器/版本创build的二进制文件之间实现简单的互操作性。 这里最值得注意的问题是二进制符号的命名约定。 在C中,该语言定义了从代码中的每个符号到二进制符号名称的单个映射。 一个名为my_function的函数将在名为my_function的二进制文件中创build一个符号。 另一方面,由于像函数重载这样的特性,C ++函数的名字必须被破坏 (在二进制中翻译成不同的函数符号,对参数types和返回types进行编码),标准没有定义执行修改。 这又意味着C ++中的相同函数可以根据编译器编译为不同的符号(除非使用extern "C"强制C ++中的这些函数的C互操作性)。

在一天结束时,脚本语言和本地代码之间的接口无论如何都必须是C接口,即使内部实现的细节可以是C / C ++ /任何其他本地语言。

(我故意不想进入一场语言先兆的火焰战争,C ++是非常强大的,但它也有点吓人,因为它比C复杂得多,有些看起来简单的东西可能会影响到性能)

语言本质上并不是速度更快或更慢,口译员和编译者可能或多或less地有效。

除此之外,更高级别的语言提供通常具有运行成本的抽象层。 如果你不使用它们,编译器可能足够聪明,可以去除它们,但是如果语言的语义不能安全地执行它,那么这可能是不可能的。如果你需要它们,自己实现它们在较低级别的语言将可能比使用“慢”语言慢。

正如Bjarne在[D&E]中提到的那样,有效性是C ++的主要目标之一。 因此,只有当程序员使用像你所提到的虚函数那样的“额外”function时,C ++才会变慢

所以我认为这是更多的心理原因 – 使用C,因为它不允许“慢”的C ++function。