什么是__builtin_operator_new及其工作方式?

时间:2019-10-15 09:05:09

标签: c++ clang libc++

遍历libc ++代码时,我看到ndk分配器__allocate函数正在调用__builtin_operator_new,但是在libc ++代码中找不到其定义。

按名称显然是内存分配功能。但是谁来实现呢?它是由clang,gcc等编译器定义的吗?在哪里可以找到它的定义?

1 个答案:

答案 0 :(得分:7)

这是一个内在函数,由编译器本身隐式定义(因此被称为内置函数)。 documented位于Clang的语言扩展部分:

  

__ builtin_operator_new和__builtin_operator_delete

     

__builtin_operator_new就像非放置非类new-expression一样分配内存。这与直接调用普通的非放置::operator new类似,除了它允许某些优化,C ++标准不允许对::operator new的直接函数调用(特别是删除新的/删除对)和合并分配)。

     

同样,__builtin_operator_delete就像非类的delete-expression一样释放内存,就像直接调用普通的::operator delete一样,只是它允许优化。当前仅__builtin_operator_delete的大小不可用。

     

这些内置插件旨在用于std::allocator和其他类似分配库的实现中,并且仅在C ++中可用。