遍历libc ++代码时,我看到ndk分配器__allocate
函数正在调用__builtin_operator_new
,但是在libc ++代码中找不到其定义。
按名称显然是内存分配功能。但是谁来实现呢?它是由clang,gcc等编译器定义的吗?在哪里可以找到它的定义?
答案 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 ++中可用。