не научились использовать operator delete(void*, size_t). Кстати никто не интересовался, хоть один аллокатор уже научился этому?
А этим можно без аллокатора пользоваться?
https://en.cppreference.com/w/cpp/memory/new/operator_delete Перегрузки 5-6. Из описания узнал, что плюсы позволяют удалять объекты incomplete типа. Хорошие, качественные грабли.
В прочем, наверное, достаточно не определять (удалить дефолтный?) оператор без передачи размера. Наверное, тогда будет ошибка компиляции при попытке вызвать обычный delete.
Да позволяют, но если класс нигде не определён скорее всего не слинкуется
Ну это скорее всего удаление opaque pointer. На мой взгляд это большой косяк, потому что я ожидал, что управление памятью тоже будет недоступно внешнему коду.
По идее неизвестно даже приватный ли деструктор, так что всё сложно
Уверен что почти все, вот пример tcmalloc https://github.com/google/tcmalloc/blob/master/tcmalloc/tcmalloc.cc#L1756 Но в целом это не даёт современным аллокаторам значительных преимуществ, для маленьких аллокаций используются фиксированный размер блоков, и для них мы просто можем выкинуть вычисление этого размера блока (несколько операций с указателем, и массивом) А для больших даже если они сохранялись в аллокации, это в целом не важно https://github.com/google/tcmalloc/blob/master/tcmalloc/tcmalloc.cc#L1732
а в чем вопрос то ?
Для того чтобы выкинуть размер блока, нужно уметь по указателю определять размер блока. Первое что приходит в голову - это иметь группы блоков стандартного размера кратного двойке и хранить размер блока например в начале группы, чтобы его можно было получить обнулением младших битов адреса. Вероятно в современных аллокаторах используют подобный подход. Кажется что вот эта функция делает что-то похожее.
Не совсем так, но да, небольшие объекты в tcmalloc эффективно батчатся https://google.github.io/tcmalloc/design.html#deallocation https://google.github.io/tcmalloc/design.html#pagemap-and-spans
В целом да. Насколько я помню в tcmalloc конкретно это работает засчет того что есть специальное дерево (2-3 уровневое), которое для адресов страничек (аллокатора, не ос), которые используются под конкретный размер аллокаций, хранит то под какой размер(ну класс не важно)
Вторая ссылка про это
Обсуждают сегодня