Wil*_*3uk 69 c c++ performance
据我所知,所有脚本语言和核心科学程序通常都是用C语言编写的; 这使得实现变得凌乱,但却直截了当.
我理解这些人希望最大限度地提高他们的表现,但是使用C字符串和C结构来使用C++类之间存在真正的区别; C++似乎以相同的方式工作,除了虚函数之外,它只存储一个类函数,并且该类的每个实例都调用一个函数.
是什么让C更快,并且在像python或sqlite这样的项目中它必须是最快的显着差异?
Pot*_*ter 48
C++通常用于科学计划.在该领域,C的受欢迎程度可能正在减弱.Fortran作为一种"低级"语言仍然很受欢迎.
在C++中,"你只需支付你使用的费用." 因此没有任何东西会使它比C慢.特别是对于科学程序,表达式模板可以使用模板引擎执行一些自定义优化来处理程序语义.
为Python等项目选择C的原因是许多人(相对)完全理解它,因此大型代码库不会混淆许多大量贡献者.
SQLite需要小的可执行代码大小,其中C确实有轻微的优势.明智地使用C++仍允许在嵌入式应用程序中使用,但由于担心不需要的语言功能会不断涌入,因此它不太受欢迎.
Dav*_*eas 25
我不认为其原因与性能和互操作性有很大关系.C++语言比C语言更复杂,但从性能的角度来看,两种方式都不应该有明显的区别.一些C++构造比C等价(std::sort
比快qsort
)更快,并且可能有相反的好例子.
编辑:在互操作性方面......
基本上,C++标准没有定义可能需要的一些东西,以便在使用不同编译器/版本创建的二进制文件之间轻松实现互操作性.这里最值得注意的问题是二进制符号的命名约定.在C中,该语言定义了从代码中的每个符号到二进制符号名称的单个映射.调用的函数my_function
将在二进制文件中创建一个名为的符号my_function
.另一方面,由于函数重载等功能,C++函数的名称必须被修改(在二进制文件中转换为不同的函数符号,编码参数的类型和返回类型),标准没有定义如何进行修剪.这反过来意味着可以根据编译器将C++中的相同函数编译为不同的符号(除非extern "C"
用于强制C++中的那些函数的C互操作性).
在一天结束时,脚本语言和本机代码之间的接口无论如何都必须是C接口,即使它在内部实现的细节可能是C/C++ /任何其他本地语言.
(我故意不想进入语言预防的火焰战争,C++真的很强大,但它也有点可怕,因为它是一种比C更复杂的语言,而一些看似简单的东西可能会对性能)
语言本身并不是更快或更慢,解释器和编译器可能或多或少有效.
除此之外,更高级语言提供通常具有运行时成本的抽象层.如果您没有使用它们,编译器可能足够智能去除它们,但如果语言的语义不允许安全地执行它,那可能是不可能的......如果您需要它们,请自己实现它们较低级别的语言可能比使用"慢"语言慢.
正如Bjarne在[D&E]中提到的,有效性是C++的主要目标之一.因此,只有当程序员使用"额外"函数(如您提到的虚函数,rtt信息等)时,C++才会变慢
所以我认为这更多是出于心理原因 - 使用C是因为它不允许"缓慢"的C++功能.