核心觀點
- 作業系統核心非「大型專案」:核心需求固定、規模可控,追求極致效能與可靠性,C 語言足夠且更透明。
- C++ 抽象能力強,但引入複雜度:建構子/解構子、例外處理、RTTI、虛函數表在核心環境需謹慎使用,甚至禁用(Linux 核心禁用例外、RTTI)。
- 全域資料在 C++ 的優雅處理:使用 單例模式 封裝全域狀態,而非裸全域變數。
- Linux 核心 API 封裝:用戶空間程式庫(glibc、libstdc++)已提供完整封裝;核心內部以 C 結構體 + 函數指標模擬物件導向(如
file_operations、inode_operations)。
- Linux GUI 開發框架:Qt(C++)、GTK(C)、wxWidgets(C++)、EFL(C)。無單一官方 MFC 對應,因 Linux 核心與圖形層分離,可自由選擇工具包。
詳細比較
| 維度 | C 語言 | C++ |
| 核心開發適用性 | ✅ 主流選擇 (Linux, Windows NT, BSD) | ⚠️ 受限使用 (Windows 核心部分、Zircon, Fuchsia) |
| 記憶體管理 | 手動 malloc/free,完全控制 | RAII、智慧指標,但核心環境常禁用例外 |
| 抽象機制 | 結構體 + 函數指標 (手動虛表) | 類別、繼承、虛函數、模板 |
| 編譯器支援 | GCC/Clang/MSVC 完整 | 核心編譯需特殊旗標 |
| 生態系統 | 成熟、穩定 | 用戶空間豐富 |
C++ 單例模式範例
class GlobalManager {
private:
static GlobalManager* instance;
GlobalManager() {} // 私有建構子
public:
static GlobalManager* getInstance() {
if (!instance) instance = new GlobalManager();
return instance;
}
void doSomething() { /* 操作全域資源 */ }
};
// 使用
GlobalManager::getInstance()->doSomething();
結論
- 核心層:C 語言為主,必要時謹慎引入 C++ 子集。
- 驅動/模組:視平台而定,Windows 驅動常用 C++,Linux 驅動純 C。
- 用戶空間:自由選擇,C++ 配合 Qt/Boost 開發效率高;系統工具常用 C/Rust/Go。