170 похожих чатов

Скорее всего аллокатор хранит размер аллокации и флаги, если они

не научились использовать operator delete(void*, size_t). Кстати никто не интересовался, хоть один аллокатор уже научился этому?

12 ответов

10 просмотров

А этим можно без аллокатора пользоваться?

magras- Автор вопроса

https://en.cppreference.com/w/cpp/memory/new/operator_delete Перегрузки 5-6. Из описания узнал, что плюсы позволяют удалять объекты incomplete типа. Хорошие, качественные грабли.

magras- Автор вопроса
magras
https://en.cppreference.com/w/cpp/memory/new/opera...

В прочем, наверное, достаточно не определять (удалить дефолтный?) оператор без передачи размера. Наверное, тогда будет ошибка компиляции при попытке вызвать обычный delete.

magras
https://en.cppreference.com/w/cpp/memory/new/opera...

Да позволяют, но если класс нигде не определён скорее всего не слинкуется

magras- Автор вопроса
disba1ancer
Да позволяют, но если класс нигде не определён ско...

Ну это скорее всего удаление opaque pointer. На мой взгляд это большой косяк, потому что я ожидал, что управление памятью тоже будет недоступно внешнему коду.

magras
Ну это скорее всего удаление 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

а в чем вопрос то ?

magras- Автор вопроса
Arelav
Уверен что почти все, вот пример tcmalloc https://...

Для того чтобы выкинуть размер блока, нужно уметь по указателю определять размер блока. Первое что приходит в голову - это иметь группы блоков стандартного размера кратного двойке и хранить размер блока например в начале группы, чтобы его можно было получить обнулением младших битов адреса. Вероятно в современных аллокаторах используют подобный подход. Кажется что вот эта функция делает что-то похожее.

magras
Для того чтобы выкинуть размер блока, нужно уметь ...

Не совсем так, но да, небольшие объекты в tcmalloc эффективно батчатся https://google.github.io/tcmalloc/design.html#deallocation https://google.github.io/tcmalloc/design.html#pagemap-and-spans

magras
Для того чтобы выкинуть размер блока, нужно уметь ...

В целом да. Насколько я помню в tcmalloc конкретно это работает засчет того что есть специальное дерево (2-3 уровневое), которое для адресов страничек (аллокатора, не ос), которые используются под конкретный размер аллокаций, хранит то под какой размер(ну класс не важно)

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта