C++14 サイズ付きのデアロケーション
C++14では、operator deleteに、サイズが渡されるバージョンが追加されます。
これにより、置き換え可能なoperator newとoperator deleteの一覧は、以下のようになります。
operator new(std::size_t) operator new(std::size_t, const std::nothrow_t&) operator new[](std::size_t) operator new[](std::size_t, const std::nothrow_t&) operator delete(void*) operator delete(void*, const std::nothrow_t&) operator delete[](void*) operator delete[](void*, const std::nothrow_t&) operator delete(void*, std::size_t) // 追加 operator delete(void*, std::size_t, const std::nothrow_t&) // 追加 operator delete[](void*, std::size_t) // 追加 operator delete[](void*, std::size_t, const std::nothrow_t&) // 追加
追加分の詳細なシグニチャ:
void operator delete(void* ptr, std::size_t size) noexcept; void operator delete(void* ptr, std::size_t size, const std::nothrow_t&) noexcept; void operator delete[](void* ptr, std::size_t size) noexcept; void operator delete[](void* ptr, std::size_t size, const std::nothrow_t&) noexcept;
これらのオーバーロードは、メモリアロケータ(メモリプール)を作る際の、パフォーマンス向上のために必要となります。
GoogleのTCMallocは、これがあるとパフォーマンスが大幅に向上するそうです。
参照:
N3778 C++ Sized Deallocation