C 本机代码与 Java/C# 虚拟机:了解性能差异
尽管逻辑上假设 Java 和 C# 等语言,在虚拟机而不是本机代码上运行,无法与 C 的速度相匹配,最近的进展挑战了这一概念。虚拟机语言如何超越原生语言?
JIT 与静态编译
即时 (JIT) 编译器将字节码转换为运行时的本机代码。然而,这个过程会产生一定的成本:JIT 编译器无法一次完成所有编译,这与生成完整的本机二进制文件的静态编译器不同。对于某些应用程序,静态编译将优于 JIT 编译。
C 元编程
C 的模板元编程允许在编译期间进行代码处理,从而导致运行时代码几乎为零。虽然此功能对实际应用程序的影响尚未完全实现,但这是一个值得注意的考虑因素。
本机 C 内存使用
C 的内存使用与 Java/C# 不同:与需要垃圾收集和额外运行时处理的 Java/C# 对象相比,直接指针访问内存可以提供显着的性能优势。此外,C 对内存分配和 RAII 的控制使其能够更有效地处理内存密集型操作。
C /CLI 与 C#/VB.NET
C /CLI 是 .NET 托管的 C 实现,受益于 C 本机编译器的高级优化技术。因此,由于 C 的战略代码放置启用了更积极的 JIT 优化,C /CLI 代码有时可以比等效的 C# 代码执行得更好。
结论
虽然 C# 和 Java 易于开发并提供丰富的库,但 C 在需要原始功能、终极性能优化、高级语言功能和坚定可靠性的情况下表现出色,尤其是对于低延迟和延迟敏感的应用程序。
编辑 (2011-06-06):我的 C#/.NET 经验
基于五个月的专业 C#根据编码经验,我发现虽然 C#/Java 适合生成可行的代码,但在追求卓越的代码质量时却表现不佳。泛型、RAII 和不变性限制使得实现与 C 相同水平的可靠性具有挑战性。
此外,需要超低延迟的关键服务器端应用程序转向 C 表明了 C 的持续主导地位在原始功率和精度至关重要的领域。
编辑(2011-06-22):第三方见解
独立研究证实了 C 对于要求苛刻的应用程序的性能优越性。然而,他们也强调了 C 编写平均质量代码的难度与实现高质量代码的容易程度之间的权衡。
编辑(2011-09-20):Andrei Alexandrescu 的观点
Herb Sutter 的引言出自 Andrei Alexandrescu,强调了 C 的矛盾本质。虽然编写 C 代码比其他语言更难,但由于 C 的优化功能,编写高效代码的挑战性较小。
以上是虚拟机语言能否胜过本机语言:检查 C 和 Java/C# 之间的性能差异?的详细内容。更多信息请关注PHP中文网其他相关文章!