C中的变量赋值有多少个时钟周期?

时间:2014-04-10 17:03:33

标签: java c performance

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

2 个答案:

答案 0 :(得分:3)

只有在你理解了这个陈述之后: "计算机执行过完全零行的C代码。此外,计算机曾经执行过零行的Java代码。"

你永远不会理解你的问题的任何答案。

您的问题的答案是: "用C语言编写的赋值需要不知数量的时钟周期才能完成。"

答案 1 :(得分:3)

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

C以二进制编译,这是由处理器直接执行的代码。相反,Java(最常见的)从未完全编译,而是伪编译成bytecode

这个字节码被设计为由虚拟机(在Java的情况下为JVM)解释,允许更容易的可移植性:当您需要调整C代码以使其可移植时(参见NetBSD的示例) ,或为每个目标制作不同版本的;你只需要一个不同的JVM就可以在不同的目标上运行相同的java字节码。

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

现在,就你的问题而言,要比较的真实事情是:对于给定的机器,将值复制到内存中需要多少周期(RAM,即使某些C编译器可以使用CPU注册用于存储在短时间内使用很多的变量,例如循环计数器)和汇编指令,以及JVM在读取Java字节码指令时执行相同任务所需的周期数。

我想说,通过良好的JVM实现,就我所理解的而言,分配本身没有区别。现在,还有其他一些需要考虑的标准:Java通常会大量使用对象,由于它们的复杂性,它们在RAM中占据了很多位置,因此需要花费更多时间进行分配。另外,我认为Java会进行更多检查以避免常见错误,例如访问非初始化变量,以及这些花费时间。

但请记住,编码错误的C程序比编写良好的Java程序需要花费更多的时间来执行。