作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
時間Fri Mar 6 18:22:09 2009
※ 引述《yehsd (急)》之銘言:
: : 那為啥不用C++寫作業程式 而用C呢?
: 通常來說, 作業程式(你指的是與 system 相關的嗎?) 需要較好的 performance,
: 很少人會希望自己的 operating system 慢到抓狂吧..?? C++ 因為用物件來表示
: unit, 無形中加了許多對系統 performance 有影響的東西, 比如 constructor,
: 或 destructor, 雖然 compile 完後沒幾行, 但是若是常被系統跑到的 function,
: (1000,000,000 次 x 多出來的 instruction) 我想這個數字會拖慢效能多少,
只要你不寫 constructor 或 destructor
產生/銷毀物件時就不會有額外的負擔
compiler 沒那麼笨,明知道 constructor 是空的還去 call function
如果你的資料需要初始化
那產生物件時的確需要 constructor
但若你用 C 實作相同的功能
也一樣要去呼叫某個 function 去初始化
呼叫 constructor 和呼叫一般 function 的效率並沒有差別
同樣的道理也可以應用在 destructor 身上
更何況 constructor 是 compiler 幫你自動呼叫的
在 C 裡面你可能宣告了變數卻忘了初始化
C++ 的 constructor 正好可以避免這種情況
: 應該就顯而易見了吧, C 可以用許多 tricky 避開會影響效能的 code, 最常見的
: 就是 goto.
C++ 也可以用 goto 呀
: : 難道C++有何缺點以至於不適合寫作業程式嗎?
: 同上, 主要是 C++ compiler "偷"加了許多你不知道的 code 在裡面. 這些
: code 就是為了達到 C++ 能夠成為 object-oriented 的基礎.
: : 還是只是大部分設計人員的習慣呢?
: 所以當設計人員發現 C 真的比較快時, 自然而然不會去選擇用 C++ 來寫
: 系統相關的 program....
若用相同的方法做相同的事情
C++ 並不會比 C 慢
用 C++ 會變慢多半是因為寫的人不太了解 C++
至於用不同的方法做相同的事情
的確有時候 C 比 C++ 快 (printf 比 cout 快是不爭的事實)
但也有許多 C++ 比 C 快的情況 (例:STL 的 sort 狂勝 C 的 qsort)
既然做法不一樣 那比這個也沒什麼意義可言
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.151.2
1F:→ adrianshum:我印象中有些情況 cout 比 printf 快耶 03/06 19:21
2F:推 PRAM:看一下 10268 篇吧 03/06 19:44
3F:推 softwind:我覺得 Linus說的很中肯 C++擴充C 但不代表 C++比C優越 03/06 21:11
4F:→ tinlans:遺憾的是 C++ 並非 C 的擴充。 03/06 21:14
5F:推 Chevelle:C++ 如果不是 C 的擴充為什麼要叫 C++? 03/06 21:22
6F:推 yoco315:對阿 C# 還是 C++++ 呢 03/06 21:26
7F:→ james732:C#跟C就有本質上的不同了吧 XD 03/06 21:27
8F:推 Chevelle:不是那麼「本質」的不同吧 03/06 21:34
9F:→ MOONRAKER:C#其實是個變形VB,自戀地覺得自己是C++,其實啥都不是 03/07 00:16
10F:→ james732:它跟舊的VB 6應該也很不一樣,我倒比較認同它是變形Java 03/07 00:17
11F:→ MOONRAKER:他是一個變態的Java沒錯,不過我認為他骨子裡還是VB XD 03/07 22:11
12F:→ yoco315:他是 java 03/08 11:39