2017-02-24 140 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提供的功能实现,在独立环境中不太可能拥有免费的存储内存管理功能。相反,托管环境需要免费的存储内存管理来实现标准库的功能。