С++ 14 представил "размерные" версии operator delete
, т.е.
void operator delete( void* ptr, std::size_t sz );
и
void operator delete[]( void* ptr, std::size_t sz );
Чтение через N3536, похоже, что эти операторы были введены для повышения производительности. Я знаю, что типичный распределитель, используемый operator new
, "хранит" размер объемной памяти где-то, и что типичный operator delete
"знает", сколько памяти возвращается в свободное хранилище.
Я не уверен, однако, почему "размерные" версии operator delete
помогут с точки зрения производительности. Единственное, что может ускорить работу, - это еще одна операция чтения относительно размера блока управления. Это действительно единственное преимущество?
Во-вторых, как я могу справиться с версией массива? AFAIK, размер выделенного массива не просто sizeof(type)*number_elements
, но могут быть некоторые дополнительные байты, выделенные, поскольку реализация может использовать эти байты в качестве контрольных байтов. Какой "размер" следует передать в operator delete[]
в этом случае? Можете ли вы привести краткий пример использования?