什么是__builtin_operator_new及其工作方式?

Pen*_*ala 0 c++ clang libc++

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

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

Sto*_*ica 7

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

__builtin_operator_new和__builtin_operator_delete

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

同样,__builtin_operator_delete释放内存就像非类的delete-expression一样,完全就像直接调用normal一样::operator delete,只不过它允许优化。当前仅可使用大小不一的形式__builtin_operator_delete

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