Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
看板C_and_CPP作者descent (「雄辯是銀,沉默是金」)時間12年前 (2013/06/13 06:47)推噓23(23推 0噓 38→)留言61則, 25人參與討論串32/37 (看更多)
※ 引述《x3795566 (冀憶)》之銘言:
: 如題
: 實在搞不懂為什麼
: 因為C++不是改良C的語言嗎?
: 那為啥不用C++寫作業程式 而用C呢?
: 難道C++有何缺點以至於不適合寫作業程式嗎?
: 還是只是大部分設計人員的習慣呢?
能用 c 寫出 os 的開發人員,
也能用 c++ 寫出 os 嗎?可能不一定,
因為還需要 c++ 相關知識。
要打造什麼樣的環境才能從使用組合語言進而使用
c 語言呢?
init bss, init stack, 在 x86 上使用
x86 Protected Mode Flat Memory Model
還要把 %cs, %ds, %ss 設為同一個值。
其他平台可能會有點小差異。
而要打造什麼樣的環境才能從使用組合語言進而使用
c++ 語言呢?
1. c 要做的 c++ 都要做。
2. 端看要使用哪些特性。
c++ 有很多多於 c 的特性, 我沒研究很多,
只提和 class 有關的部份。
global object ctor/dtor。
static object ctor/dtor。
global object 可能會被強調不要使用, 所以可能可以不要做這部份。
static object 可能就無法避免了。
這需要在進入 c++ code 之前就打造 static object 相關程式碼。
ref:
descent-incoming.blogspot.tw/2012/10/c-runtime-local-static-object-0.html
descent-incoming.blogspot.tw/2012/10/c-runtime-local-static-object-1.html
我自己寫完後, 重新再看一次也看不懂 XD
pure virtual function 也要打造相關的程式碼。
exception handle 也是一樣。
重點不是打造這些程式碼,
使用這些都會額外加大程式碼, 而使用 exception handle 會
拖累執行效能 (為什麼我就不知道了)。binary hacker #38 ~ #41
在談這個。
所以就算我拿 c++ 寫 os, 我也不一定會使用這些 c++ 特性。
但若使用 c++ 的 c 子集就不會有額外負擔。
那你可能認為那乾脆用 c 就好了, 但 c++ 還是提供額外的好處。
更嚴格的型別檢查, 還有好用的 function overloaded, function template,
inline function (好吧, c99 也有)。
這些都不會造成空間/時間額外負擔。
function overloaded 更可以省下 print_int, print_string, print_char,
這樣的寫法, 一個 print(int), print(const char *), print(char)
就搞定。
繼承 (不要使用 virtual function) 可能也不會有額外負擔,
不過這我不確定。
為什麼不用呢?
可能 c 程式員沒有學習 c++, 或是 c++ 太複雜,
寫 os 並不值得把心力花在這裡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.239.51
推
06/13 16:04, , 1F
06/13 16:04, 1F
推
06/13 16:41, , 2F
06/13 16:41, 2F
→
06/13 16:43, , 3F
06/13 16:43, 3F
推
06/13 17:11, , 4F
06/13 17:11, 4F
推
06/13 17:16, , 5F
06/13 17:16, 5F
推
06/13 17:31, , 6F
06/13 17:31, 6F
推
06/13 18:12, , 7F
06/13 18:12, 7F
推
06/13 21:58, , 8F
06/13 21:58, 8F
→
06/13 22:13, , 9F
06/13 22:13, 9F
推
06/13 22:19, , 10F
06/13 22:19, 10F
→
06/13 22:31, , 11F
06/13 22:31, 11F
→
06/13 22:48, , 12F
06/13 22:48, 12F
→
06/13 23:32, , 13F
06/13 23:32, 13F
推
06/14 08:38, , 14F
06/14 08:38, 14F
→
06/14 08:39, , 15F
06/14 08:39, 15F
→
06/14 08:39, , 16F
06/14 08:39, 16F
→
06/14 08:39, , 17F
06/14 08:39, 17F
推
06/14 08:41, , 18F
06/14 08:41, 18F
推
06/14 10:05, , 19F
06/14 10:05, 19F
→
06/14 10:06, , 20F
06/14 10:06, 20F
推
06/14 10:21, , 21F
06/14 10:21, 21F
推
06/14 10:33, , 22F
06/14 10:33, 22F
推
06/14 12:00, , 23F
06/14 12:00, 23F
推
06/14 14:57, , 24F
06/14 14:57, 24F
→
06/14 18:14, , 25F
06/14 18:14, 25F
→
06/14 18:16, , 26F
06/14 18:16, 26F
→
06/14 18:16, , 27F
06/14 18:16, 27F
→
06/14 18:19, , 28F
06/14 18:19, 28F
→
06/14 18:23, , 29F
06/14 18:23, 29F
→
06/14 18:23, , 30F
06/14 18:23, 30F
→
06/14 19:35, , 31F
06/14 19:35, 31F
推
06/14 20:27, , 32F
06/14 20:27, 32F
→
06/14 20:37, , 33F
06/14 20:37, 33F
推
06/14 20:41, , 34F
06/14 20:41, 34F
→
06/14 21:02, , 35F
06/14 21:02, 35F
推
06/14 22:18, , 36F
06/14 22:18, 36F
推
06/14 22:29, , 37F
06/14 22:29, 37F
→
06/14 22:29, , 38F
06/14 22:29, 38F
→
06/14 22:30, , 39F
06/14 22:30, 39F
→
06/15 00:45, , 40F
06/15 00:45, 40F
→
06/15 00:45, , 41F
06/15 00:45, 41F
→
06/15 00:46, , 42F
06/15 00:46, 42F
→
06/15 02:08, , 43F
06/15 02:08, 43F
推
06/15 02:28, , 44F
06/15 02:28, 44F
→
06/15 02:28, , 45F
06/15 02:28, 45F
→
06/15 02:29, , 46F
06/15 02:29, 46F
→
06/15 02:29, , 47F
06/15 02:29, 47F
推
06/15 07:19, , 48F
06/15 07:19, 48F
→
06/15 07:20, , 49F
06/15 07:20, 49F
→
06/15 08:34, , 50F
06/15 08:34, 50F
→
06/15 08:35, , 51F
06/15 08:35, 51F
→
06/15 08:36, , 52F
06/15 08:36, 52F
→
06/15 08:42, , 53F
06/15 08:42, 53F
→
06/15 08:43, , 54F
06/15 08:43, 54F
→
06/15 08:43, , 55F
06/15 08:43, 55F
推
06/16 17:39, , 56F
06/16 17:39, 56F
→
06/16 17:40, , 57F
06/16 17:40, 57F
→
06/16 17:40, , 58F
06/16 17:40, 58F
→
06/16 20:38, , 59F
06/16 20:38, 59F
→
06/17 15:24, , 60F
06/17 15:24, 60F
推
06/19 00:45, , 61F
06/19 00:45, 61F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 32 之 37 篇):