java和c哪个效率高_可以通俗详细地解释一下为什么C的效率比Java高?

谢邀。

首先说明一个问题:在说“低级语言”时,我们并不是指“这个语言好沙雕/没有有用的功能”,毕竟大多数语言都做到了图灵完备,在表达能力方面是彼此等价的。一般来说低级语言是指面向机器设计的二进制机器码和汇编语言这种基本没有可读性的玩意。考虑到C语言非常贴近机器的一些设计(甚至还支持内嵌汇编代码),可能在非常非常广义的角度上来讲,C也勉强是一种低级语言,但一般来说,我们还是叫它高级语言的。

同时有趣的是,C语言刚好是题主所提问题的反例。C作为高级语言,在编译和优化以后生成的汇编代码基本和专业人员(虽然这种人越来越少了)手写的汇编速度相近,甚至快于一些新手写的代码(优势主要在使用机器特殊的优化指令和进行一些比较难手动完成的优化)。所以说低级语言效率比高级语言高并不一定成立。事实上,只要经过完美的设计和(超级烧脑烧时间)的debug,大多数高级语言编译器应该都能生成接近手写效率的汇编代码。

另外,从题主给的例子来看,题主想问的问题应该是为什么编译型语言比解释性快。我们先打个比方:想象你有一只机械臂,靠给一堆电线通电断电来控制各个关节的运动(实在不懂机械臂原理,就这样瞎BB了,见谅)。现在你要设计一块电路接在外面的电线上,让这个机械臂拿起一只杯子。

其实你有两个选择:

1.仔细研究一下拿起杯子需要哪些操作,然后做一块依次给那些电线通电断电完成“拿杯子”操作的电路。

2.干脆做一块能把人话转化成对应信号的AI电路(比如贾维斯),然后对它吼:“把杯子拿起来!”

方案一对应着编译:把拿杯子的指令先转化(编译)成产生电信号的电路,再把它接在机械臂上(运行)。注意这一方案在拿杯子时工作的只有产生电信号的电路,而转化人话转电信号是事先完成了的。

方案二对应着解释:直接接一块能把人话转化(解释)成电信号的复杂电路,再说出指令(运行)。注意这一方案拿杯子时转化人话的电路是在运行的,而且命令是运行时下的。

所以编译器把一部分工作提前完成了,不像解释器要现场翻译,自然快一些。

但是解释器的优点在于你可以临时变卦,喊“把杯子摔在地上!”,但如果是编译器,那么对不起,请重新做一块新电路。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值