Что такое __builtin_operator_new и как оно работает? - PullRequest
0 голосов
/ 15 октября 2019

Проходя через код libc ++, я вижу, что ndk allocators __allocate вызывает функцию __builtin_operator_new, но я не смог найти ее определение в коде libc ++.

По имени видно, что это выделение памятифункция. Но кто это реализует? Это определяется компилятором, как clang, gcc? где я могу найти его определение?

1 Ответ

7 голосов
/ 15 октября 2019

Это свойство, неявно определяемое самим компилятором (поэтому и называется встроенным). задокументировано в разделе расширения языка для Clang:

__buildin_operator_new и __builtin_operator_delete

__builtin_operator_new выделяет память так же, как неразмещение неклассного нового выражения. Это точно так же, как прямой вызов обычного неразмещения ::operator new, за исключением того, что он допускает определенные оптимизации, которые стандарт C ++ не разрешает для прямого вызова функции ::operator new (в частности, удаление новых / удаленных пар и объединение выделений).

Аналогично, __builtin_operator_delete освобождает память точно так же, как не-классное выражение удаления, и точно так же, как прямой вызов нормального ::operator delete, за исключением того, что он разрешает оптимизацию. В настоящее время доступна только нестандартная форма __builtin_operator_delete.

Эти встроенные функции предназначены для использования в реализации std::allocator и других подобных библиотек распределения и доступны только в C ++.

...