C語言和C++哪個效率更高?老司機3句話告訴你答案

2019-08-03     C語言編程開發

很多小夥伴都會有這樣的疑問,C語言和C++執行效率上哪一個更高呢?

針對這樣的問題,今天我們就一起來看一下吧!

C語言C++

1.開發效率

當代碼量比較小的時候,使用c語言可以很方便的就完成代碼的開發和維護,但是當代碼量達到一定數目以後,c++面向對象的思想的優勢就很好的體現出來了,這種思想使代碼重用更加高效。

2.執行效率

從語言特性角度上來看,C++是C的超集。

(C++) - C的這部分語言特性中有很多會降低執行效率。一個例子是dynamic_cast,執行一個dynamic_cast要消耗100-300個CPU cycles,因為機器要跳到一段特別的snippet(一小段程序)去檢查type inheritance。


除了語言特性,通常比較語言也會比較它們的標準資料庫。

例如C++中std::sort函數肯定比C語言中的qsort快(因為template function的優點),但是C++中的iostream系列又比C的printf系列慢幾乎3倍,但是由於C++標準庫功能比C語言大得多,許多時候我們可以用較少的開發時間就在C++中實現相同的算法。

另外,不同編譯器對語言的執行效率影響也很大。

C語言C++


3.C++相對於C的抽象,相較於直接用C的實現,效率如何呢?

  • 異常:對於GCC C++用的dwarf異常比C裡面模擬實現用的longjmp時間效率要高,畢竟他記錄了哪些callee-saved 寄存器是需要恢復的,用空間換了些時間。
  • 返回結構體對象:C++支持對於非POD執行返回拷貝優化,C99結構體由於都是POD,有的版本依然不能支持返回拷貝優化。
  • 虛函數:這種抽象,C實際有2種實現,一種就是照搬C++的實現,顯然效率不會有太多差別;第二種是讓每個對象持有每個虛函數的函數指針,初始化慢些且對象或者虛函數多了也特別費內存,但是調用虛函數時少了一次間接尋址,而且還可以運行期修改這個函數指針的值。
  • C++函數模版(operator <) vs C函數指針定義concept(qsort的比較函數指針):本質是生成多份實例用空間換時間 VS 用函數調用解耦可復用代碼和不可復用代碼從而避免可復用代碼產生多份實例,前者占用內存多點但少了些許跳轉對流水線友好,後者占用內存少點但多了些函數跳轉對流水線不友好。


一句話總結:不能簡單地說C和C++哪個效率更高。它們各有各的特性,如何利用它們各自的特性生成運行效率優秀的程序,是一個程式設計師應該思考的事情。

C語言C++

加C/C++學習交.流群獲取C語言、C++、Windows高級編程,MFC框架編程、QT框架編程,Linux應用程式開發,Linux內核研究等系統學習路線,更有進階乾貨的直播免費學習權限 ,都是大牛帶飛 讓你少走很多的彎路的 群...號是 546912356

註:加..群要求

1、零基礎,目前遇到困難不知從何下手可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、基礎非常紮實,但對目前主流技術欠缺,需要突破技術瓶頸的可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.企業一線C/C++高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!

文章來源: https://twgreatdaily.com/zh-my/uiPCdW0BJleJMoPMzI3P.html