C ++独立功能

时间:2017-02-24 14:54:51

标签: c++ gcc4.7 freestanding

我可以在c ++独立环境中使用哪些功能?我正在开发一个小内核(为了我自己的乐趣),我知道我不能使用整个stdlib库,但还有什么?当我尝试使用new和delete运算符时,它编译没有麻烦,但链接器说

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

我与-lgcc-lsupc++选项相关联。我知道异常处理在独立式中是禁用的,但我对新的和删除也有点惊讶。那么我可以使用什么,不能使用什么呢?

1 个答案:

答案 0 :(得分:7)

  

我可以在c ++独立环境中使用哪些功能?

许多独立实现都是实现定义的:

  

[intro.compliance] ...一个独立的   实现是在没有操作系统的利益的情况下执行的实现,并且   有一组实现定义的库,包括某些语言支持库

     

[intro.multithread] ...在一个独立的实现中,它是实现定义的   一个程序可以有多个执行线程。

     

[basic.start.main]它   是实现定义是否需要独立环境中的程序来定义主体   功能。 [注意:在独立环境中,启动和终止是实现定义的;开始-   up包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行;   终止包含具有静态存储持续时间的对象的析构函数的执行。 - 结束说明]

     

[using.headers]独立实现的C ++标头

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

[compliance]标题<cstdlib>的提供版本应至少声明函数abort,atexit,at_quick_-   exit,exit和quick_exit(18.5)。此表中列出的其他标题应满足相同的要求   至于托管实施。

请注意,malloc / free未列在<cstdlib>所需的功能中。

就链接器错误而言,提供这些重载时不需要独立实现或托管实现:

  

[replacement.functions] C ++程序可能为12个动态内存分配函数签名中的任何一个提供定义   在标题<new>

中声明

实际上,由于独立环境不能依赖于操作系统,并且malloc通常使用操作系统提供的功能来实现,因此在独立环境中不太可能具有免费的商店内存管理功能。相反,托管环境需要免费的商店内存管理来实现标准库的功能。