2017-02-24 139 views
4

我可以在C++獨立環境中使用哪些功能?我正在開發一個小內核(爲了我自己的樂趣),我知道我不能使用整個stdlib庫,但還有什麼?當我試圖使用新的和刪除它沒有煩惱編譯運營商但鏈接說C++獨立式的功能

undefined reference to `operator new[](unsigned long) 
undefined reference to `operator delete[](void*)' 

-lgcc-lsupc++選項鍊接。我知道異常處理是獨立禁用的,但我對新的和刪除也有點驚訝。那麼,我可以使用什麼,我不能?

回答

6

我可以在C++獨立環境中使用哪些功能?

許多獨立實現被實現定義:

[intro.compliance] ...一個獨立的實施 是其中執行可發生沒有操作系統的權益,和 有一個實現定義的庫集,其中包含某些語言支持庫

[intro.multithread] ...在獨立實現下,它是實現定義是否可以使用 程序重於一個執行線程。

[basic.start.main]它是實現定義的,是否需要獨立環境中的程序來定義主要功能 函數。 [注意:在獨立環境中,啓動和終止是實現定義的; start- up包含具有靜態存儲持續時間的名稱空間作用域對象的構造函數的執行; 終止包含靜態存儲持續時間的對象的析構函數的執行。 - 注完]

[using.headers] C++標頭獨立實現

<ciso646> 
<cstddef> 
<cfloat> 
<limits> 
<climits> 
<cstdint> 
<cstdlib> 
<new> 
<typeinfo> 
<exception> 
<initializer_list> 
<cstdalign> 
<cstdarg> 
<cstdbool> 
<atomic> 

[遵守]報頭<cstdlib>的提供的版本應至少功能中止聲明,atexit對,at_quick_- 退出,退出和快速退出(18.5)。本表中列出的其他標題應與東道國實施相同的要求 。

注意malloc/free不在的<cstdlib>所需功能列出。


至於你的鏈接錯誤而言,既不獨立,也不主持實施需要提供這些重載:

[更換。功能] AC++程序可以任何十二動態存儲器分配的函數簽名 在頭<new>

在實踐中宣稱提供的定義,因爲自由直立環境不能依賴於OS,和malloc通常是通過使用由OS提供的功能實現,在獨立環境中不太可能擁有免費的存儲內存管理功能。相反,託管環境需要免費的存儲內存管理來實現標準庫的功能。