java和c哪个效率高_可以通俗详细地解释一下为什么C的效率比Java高?
謝邀。
首先說明一個問題:在說“低級語言”時,我們并不是指“這個語言好沙雕/沒有有用的功能”,畢竟大多數語言都做到了圖靈完備,在表達能力方面是彼此等價的。一般來說低級語言是指面向機器設計的二進制機器碼和匯編語言這種基本沒有可讀性的玩意。考慮到C語言非常貼近機器的一些設計(甚至還支持內嵌匯編代碼),可能在非常非常廣義的角度上來講,C也勉強是一種低級語言,但一般來說,我們還是叫它高級語言的。
同時有趣的是,C語言剛好是題主所提問題的反例。C作為高級語言,在編譯和優化以后生成的匯編代碼基本和專業人員(雖然這種人越來越少了)手寫的匯編速度相近,甚至快于一些新手寫的代碼(優勢主要在使用機器特殊的優化指令和進行一些比較難手動完成的優化)。所以說低級語言效率比高級語言高并不一定成立。事實上,只要經過完美的設計和(超級燒腦燒時間)的debug,大多數高級語言編譯器應該都能生成接近手寫效率的匯編代碼。
另外,從題主給的例子來看,題主想問的問題應該是為什么編譯型語言比解釋性快。我們先打個比方:想象你有一只機械臂,靠給一堆電線通電斷電來控制各個關節的運動(實在不懂機械臂原理,就這樣瞎BB了,見諒)。現在你要設計一塊電路接在外面的電線上,讓這個機械臂拿起一只杯子。
其實你有兩個選擇:
1.仔細研究一下拿起杯子需要哪些操作,然后做一塊依次給那些電線通電斷電完成“拿杯子”操作的電路。
2.干脆做一塊能把人話轉化成對應信號的AI電路(比如賈維斯),然后對它吼:“把杯子拿起來!”
方案一對應著編譯:把拿杯子的指令先轉化(編譯)成產生電信號的電路,再把它接在機械臂上(運行)。注意這一方案在拿杯子時工作的只有產生電信號的電路,而轉化人話轉電信號是事先完成了的。
方案二對應著解釋:直接接一塊能把人話轉化(解釋)成電信號的復雜電路,再說出指令(運行)。注意這一方案拿杯子時轉化人話的電路是在運行的,而且命令是運行時下的。
所以編譯器把一部分工作提前完成了,不像解釋器要現場翻譯,自然快一些。
但是解釋器的優點在于你可以臨時變卦,喊“把杯子摔在地上!”,但如果是編譯器,那么對不起,請重新做一塊新電路。
總結
以上是生活随笔為你收集整理的java和c哪个效率高_可以通俗详细地解释一下为什么C的效率比Java高?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探秘福特,科技造就节油王
- 下一篇: 8月1日