2014-08-20 45 views
3

在能夠使用C++的某些功能進行內核開發之前,必須完成一些工作。例如,爲了能夠有效地使用類,必須調用例程來調用構造函數和析構函數屬性。在C++中使用模板是否需要一些任務初始化?

可以禁用不需要的其他功能,例如RTTI(運行時類型信息)。

假設類正常工作,是否需要做其他工作才能使用模板?

+1

大概Torvalds會非常想給你一些監禁時間。 – webuster 2014-09-11 12:39:18

回答

3

我認爲主要的問題是編寫運行時代碼來處理異常處理。內核和編譯器需要就調用約定的細節達成一致,比如堆棧的結構,以及析構函數如何被註冊,發現和調用。

如果你想支持異常處理,那麼你(基本上)必須啓用RTTI,因爲C++ catch語義做動態類型匹配。

另一個問題可能是內存分配。 new很自然地映射到malloc,但如果你有一個奇怪的kmalloc與額外的參數(如Linux),那麼它可能需要一些思考。

模板以及調用構造函數和析構函數(除了異常處理)的位置完全由編譯器處理,所以應該「只是工作」。

+0

運算符重載也應該「正常工作」,對吧? – mmk 2014-08-20 22:33:30

+1

是的,我認爲運算符重載應該「只是工作」。如果你的內核使用的是用戶級使用的相同調用約定,那麼獲取異常工作可能也不會太難。在gcc中,我_think_(但不確定)系統相關運行庫的相關庫是'libstdC++ - v3'的'libsupC++'子集。 – 2014-08-20 22:42:26

+1

在鏈接器腳本中也很重要(如果使用異常處理)不會丟棄eh_frame – mmk 2014-08-20 23:02:54

相關問題