7.11 Встроенные функции для выделения и освобождения памяти в C++
GNU C++ предоставляет встроенные функции, эквивалентные вызову ::operator new или ::operator delete с теми же аргументами. Ошибка возникает, если выбранная перегрузка ::operator new или ::operator delete не является заменяемым глобальным оператором. В целях оптимизации вызовы пар этих встроенных функций можно опускать, если обращение к выделенной памяти оптимизируется, если выделение можно заменить буфером в стеке, предоставленным реализацией, или если несколько вызовов выделения памяти можно объединить в один. В C++ такие оптимизации обычно разрешены только для вызовов таких заменяемых глобальных операторов из выражений new и delete.
void foo () {
int *a = new int;
delete a; // This pair of allocation/deallocation operators can be omitted
// or replaced with int _temp; int *a = &_temp; etc.
void *b = ::operator new (32);
::operator delete (b); // This one cannnot.
void *c = __builtin_operator_new (32);
__builtin_operator_delete (c); // This one can.
}
Эти встроенные функции доступны только в C++.
-
Встроенная функция:
void *__builtin_operator_new(std::size_t size, ...) Это встроенная форма
operator new. Она принимает те же формы аргументов, что и «обычная функция выделения памяти», описанная в стандарте C++.
-
Встроенная функция:
void__builtin_operator_delete(void * ptr, ...) Это встроенная форма
operator delete. Она принимает те же формы аргументов, что и «обычная функция освобождения памяти», описанная в стандарте C++.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/New_002fDelete-Builtins.html