為什麼現在的作業系統基本上用C語言來實現?

時間 2021-05-30 19:26:21

1樓:yin jie

如果把C++中的以下功能去掉,用C++寫作業系統核心和驅動還是可以的,並且效率不低

1、STL中的大多數函式(注意,乙個語言不僅包括語法特性,也包括庫函式),vector、map、iostream等等統統不能用

2、異常

3、RTTI、虛函式、虛繼承

4、全域性變數定義時使用建構函式初始化和終止化

5、C++11中的lambda之類的

不過這時C++還剩什麼呢?

1、靜態型別檢查和自定義的模板

2、類(可以繼承的,有私有和共有)

3、namespace

4、函式過載

5、預設引數

如果你願意割捨那些不能用的,並且完全謹遵這些可以用的,C++還是不錯的,不就閹割一下嘛。那麼在C++中的這些剩下的特性如何被C代替呢?

1、巨集和指標的各種技巧

2、巨集和結構體的各種技巧

3、巨集改變變數名的各種技巧

4、寫的時候小心點,反正出錯了編譯器會報錯

5、巨集中巢狀巨集的各種技巧

所以C++無非就保留一點C的語法糖,用巨集也能實現嘛。乙個是用美好的巨集的實現,乙個是用被閹割後的C++,哪種更好呢?

注:那些去掉的功能也可以保留,就是非常麻煩,例如

1、使用核心C函式或者彙編函式把各種allocator實現了,使用kernel log把iostream實現了,使用。。。

2、正確地在核心中實現乙個異常鏈或者棧展開,注意此時有各種中斷、記憶體缺頁、程序IO,別出錯就行

3、正確地在核心中識別各種RTTI變數、虛表結構、型別資訊等原本應該是編譯器和執行時乾的事情(核心中把這些都加進來幹嘛?)

4、這個比較麻煩,得事先定義初始化和終止化究竟是核心跑到哪一步做,然後把這些原本應該是執行時乾的做出來(核心中把這些都加進來幹嘛?)

5、在核心中實現乙個lambda的類,解決好各種閉包傳遞問題、閉包分配問題、閉包銷毀問題

麻煩吧?編譯器都不好意思說自己能完全實現C++,居然還要扯進來作業系統。

2樓:

3樓:Belleve

寫作業系統核心勢必要接觸底層的東西(比如具體的硬體協議),所以語言不能太高階。

但是又不能如彙編般低階,於是就只能用 C 這個結構化的彙編了。

IOT作業系統用C 庫的經驗總結

鏡章 現在國家宣傳部門比以前聰明多了,知道現在的年輕人喜歡什麼,喜歡什麼就從哪入手。蔡徐坤 吳亦凡 楊洋等都是人氣極高的流量明星,同時思想上沒什麼黑點,讓他們帶動思想宣傳,事半功倍。 我這個疑問只能匿名啦 非黑但是一開始真的不能理解,武大靖3個月前乙個人扛著乙個國家前進,純實力說話,讓別人想黑你中國...

為什麼現在出的作業系統總是基於 Linux,重新來個不行嗎?

宓俊 相對來說,做乙個Linux發行版需要的勞動力是最小的。http www.linuxfromscratch.org 介紹了所需要的知識。因為Linux的發行版很多,更新很快,佔據了大部分新聞 論壇版面,讓你有了其他作業系統很弱勢的錯覺。其實FreeBSD,illumos OpenSolaris一...

為什麼現在作者基本上都寫套路文?

睡不著覺的小紅 1.大部分作者不會寫文,只會寫梗 w2.部分讀者看文只是為了娛樂,並不一定喜歡看那種慢熱現實的文,類看電影的商業片和文藝片。 風華 因為故事已經被寫盡了,想另寫出乙個套路基本是不可能了。你覺得那些套路文沒意思是因為作者,而不是套路。作者筆力不濟寫不好的。而那些你看著新鮮的作品是因為你...