gpt4 book ai didi

java - C 中变量赋值需要多少个时钟周期?

转载 作者:行者123 更新时间:2023-11-30 20:46:14 24 4
gpt4 key购买 nike

有谁知道在x86平台上用C语言进行变量赋值需要多少个时钟周期?人们普遍认为它比java花费更少,这背后的原因是什么?

最佳答案

C 和 Java 之间的差异并不取决于语言本身的差异,而是取决于这两种语言背后的技术的差异:

C 以二进制形式编译,这是处理器直接执行的代码。与此相反,Java(大多数情况下)从未完全编译过,而是伪编译为 bytecode .

此字节码设计为由虚拟机(Java 中的 JVM)解释,从而实现更轻松的可移植性:虽然您需要调整 C 代码以使其可移植(请参阅 NetBSD 的示例) ,或者为每个目标制作不同的版本;您只需要一个不同的 JVM 即可在不同的目标上运行相同的 java 字节码。

值得注意的是,Java遵循JIT模型,允许进行通常不可能的优化,因为它们依赖于仅在运行时已知的条件。

现在,就您的问题而言,真正需要比较的是:对于给定的机器,将值复制到内存(RAM,即使某些 C 编译器可以使用 CPU)需要多少周期寄存器来存储在短时间内大量使用的变量(例如循环计数器)与汇编指令的比较,以及 JVM 在读取 Java 字节码指令时需要多少周期来完成相同的任务。

据我所知,我想说的是,如果有一个好的 JVM 实现,分配本身不会有什么区别。现在,还有其他标准需要考虑:Java 通常会大量使用对象,由于其复杂性,它们在 RAM 中占据大量空间,因此也需要更多时间来分配。另外,我相信 Java 会进行更多检查以避免常见错误,例如访问未初始化的变量,而这些也会花费时间。

但请记住,执行一个编码错误的 C 程序可能比执行一个编码良好的 Java 程序花费更多的时间。

关于java - C 中变量赋值需要多少个时钟周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22994479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com