當前位置:
首頁 > 最新 > 彙編語言比c語言快,這是誤會

彙編語言比c語言快,這是誤會

首先說這是謬論(有沒有想噴我的衝動?大人且慢,請聽我慢慢道來)。

不管用什麼語言,程序最終都是給cpu運行的,只有cpu才能讓程序跑起來。cpu不知道什麼是彙編語言、c語言、甚至java、php、python等,它根本不知道交給它的指令曾經經歷過那麼多的解釋、編譯工序。不管什麼語言,編譯器最終翻譯出來的都是機器指令。所以在這一點來說,彙編語言編譯器編譯出來的機器指令和c編譯器編譯出來的機器指令無異。

那為什麼還說彙編語言更快呢。

我覺得應該說,彙編語言生成的指令數更少,從而「顯得」執行的快,並不是彙編語言本身有多少威武霸氣,而是因為彙編語言本身就是機器指令的符號化,意思是說,一個彙編語言中的符號對應一個機器指令,它們是一一對應的。所以用彙編語言寫程序就相當於直接在寫機器指令,彙編語言編譯器並不會添加額外的語句,因此彙編語言寫的程序會更直接, cpu不會因多執行一些無關的指令而浪費時間,當然會快。

再看看c編譯器為咱們做了什麼。為了讓c程序員更加方便地編程,c編譯器在背後做了大量的工作,不僅如此,出於通用性、易用性或者其它方面的考慮,c編譯器往往會在背後加入額外的c語言代碼來支撐,因此實際的c代碼量就變得很大。另外在編譯階段,c代碼會率先被編譯成彙編代碼,然後再由彙編器將彙編代碼翻譯成機器指令,由於c代碼已經變得冗餘了,編譯出的彙編代碼自然也會冗餘,自然其機器指令也會多很多。

大多數人願意用c語言寫程序是因為c語言強大且更容易掌握。但這份優勢是有代價的。c程序員不用考慮切換棧,不用考慮用哪個段。這些必須要考慮的事情,程序員不考慮,只好由編譯器幫著考慮了。而且為了通用性、功能、甚至安全方面的考慮,自然在背後要多寫一些代碼。就拿列印字元串來說,c語言的printf(),這裡面的工作可多了去了,不僅要檢查列印的數據類型,還要負責格式,小數點保留位數……而在彙編語言中只要往顯存地址處mov一個字元就行了,字元串也就是多幾個mov操作而已。您說,c語言為了讓開發者用的爽,自己在背後做了多少貢獻。

總結:高級語言如c語言為了通用性等等,需要兼顧的東西比較多,往往加入一些額外的代碼,因此編譯出來的彙編代碼比較多,很多部分都是一些周邊功能,並不是直接起作用的,不如直接用彙編語言直接寫功能相關的部分效果來得更直接,c語言被編譯成機器指令後,生成的機器指令當然也包括這些額外的部分,相當於多執行了一些「看似沒用」的指令,因此會比直接用彙編語言慢。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 北京大剛 的精彩文章:

TAG:北京大剛 |