首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求编译语言与机器语言、C语言、JAVA执行效率

2014-01-15 
求汇编语言与机器语言、C语言、JAVA执行效率本帖最后由 u012909623 于 2014-01-14 20:58:51 编辑比如有道题

求汇编语言与机器语言、C语言、JAVA执行效率
本帖最后由 u012909623 于 2014-01-14 20:58:51 编辑 比如有道题要算1+1=?,那么分别用JAVA、C语言、ASM、机器语言编写后执行程序,那么这4个程序之间的运行速度之比大概是多少呢?只需要说个大概就行,题目也不一定是1+1,但要说出数值,不要说ASM稍微比机器语言慢一点点这种没有度量标准的话。
[解决办法]
对于简单的逻辑,Java、C产生的汇编代码和手工写的机器代码完全一样,所以运行速度是1:1:1。
但是Java运行之初有一个将字节码转化为机器代码的过程,会消耗一个固定的时间,这个时间远远比做一个加法要大得多,所以程序的运行时间可能相差很多很多倍。

一般来说,现代的处理器非常非常复杂,很少有一般的程序员可以手工写出比C/C++编译器更好的机器代码,所以对于一般情况下来说,用C++写程序会比直接写汇编效率更高一些。更重要的是,不同处理器的差异(缓存容量不同、指令集不同、分支预测机制不同)使得对于同样的程序,很难做到在不同的处理器上都保持高效,这方面,Java相比较C++更有优势,因为它在程序运行的时候才做针对特定硬件的代码优化,而C++必须产生所有处理器都可以运行并且综合效率较高的程序。因此,Java程序在某些情况下,效率要比C程序更高,但是总体上说,C程序的效率要好于Java,但是这种局面可能会在未来逆转。目前C#编译器的效率已经超过了原生的C++编译器(微软的JIT和C++编译器出自同一团队)。
[解决办法]
估计你可能完全没有概念,因为看得出,你的问法非常业余。我再多说几句,没有很高深的理论。

你可以下载一个叫super pi的软件,这个小程序可以计算圆周率。
我希望你手边有不止一台计算机,最好它们CPU的型号还能有所差异。

我们可以做这样两个实验:
实验1,在相同的处理器上,我们设置不同的内存频率,运行100万位计算,我们观察运行所需要的时间。
我用我的计算机做了一个实验,结果如下:
同样都是 Intel Celeron E1200 @ 2.13GHz CPU,设置DDR400和DDR800,运行1M运算,分别用时36秒和31秒。相差超过10%。

实验2,在不同的处理器上运行100万位计算和3200万位计算,观察时间,结果如下:
Intel Celeron E1200 @ 2.13GHz 1M 31秒。32M 29分钟。
Intel Pentium E5200 @ 2.5GHz 1M 21秒。32M 25分钟。
我们看到,E5200在1M规模下的运算优势将近50%,而在32M位运算上,只领先了16%。

如果你有兴趣,你也可以做类似的实验。

这说明了即便对于一个已经确定的程序,在不同的硬件上运行,花费的时间长短也是差异巨大的。

我们还可以再做一个实验:
运行WinRAR 5.0自带的性能测试,下面是对比
Intel Celeron E1200 @ 2.13GHz 结果 940KB/s
AMD Athlon 64 X2 5200+ @ 2.7GHz 结果 1420KB/s
运行Super Pi 1M运算,下面是对比
Intel Celeron E1200 @ 2.13GHz 结果 31秒
AMD Athlon 64 X2 5200+ @ 2.7GHz 结果 36秒

很明显,Intel的处理器在第一个项目中大幅落后AMD的处理器,但是在第二个项目,则反倒领先。

因此,你是一个程序的开发者,你能够脱离具体的硬件说你的处理器运行时间定量的运行效率是多少么?

热点排行