Маjко
Loyd
Хуй знает, надо бенчи сделать
Маjко
аллокаторы умеют оптимизировать
Loyd
Маjко
Лики?
Маjко
С компилятором никак, но в RAII боттлнек в том, что деаллокация происходит всегда при выходе из скопа.
А она как бы не мгновенная.
Аллокаторы делают отложенную деаллокацию и/или переиспользуют локальный буффер аллокатора треда, не делая вообще никаких действий при возможности
Loyd
Хм, интересно
Loyd
Где почитать?
Маjко
Пфф... щас, так прям не вспомню, это больше остаточные знания без привязанного источника
Loyd
Но это все равно аллокатор, прибитый к компилятору. В каком-нибудь jemallocе не сделать
Loyd
Ибо инфы нет, что деаллок во время выхода из скопа, очевидно
Маjко
Почитай про jemalloc, вообще
Маjко
Маjко
Сорцы Box, реализация Drop
Маjко
И прочие деструкторы в крестах
Loyd
А, в смысле в обертке (деструктор) оптимизация, а не в аллокаторе
Маjко
А что там оптимизировать?
Маjко
Он вызывает аллокатор
Loyd
Ну вот отложенная деаллокация
Маjко
Это часть алгоритма аллокатора
Loyd
Где код, который откладывает?
Маjко
В аллокаторе)
Сережа
Сережа
а бля
Сережа
shared внутри атомик
Loyd
Ну и когда таки реальная деаллок я происходит?
Vladimir
насчет деаллокации, то зачем нужна какая-то дополнительная информация о том вышел объект из скопа
Маjко
Не нашел пруфлинк, с доками у этих штук вечные проблемы
Но ЕМНИП, у jemalloс есть на каждый тред свой мини-хип, который он переиспользует, чтобы не блокировать всё приложение на время аллокации/деаллокации.
Loyd
Маjко
ну мне кажется это разумным менеджить память в отдельном потоке
Не, операции с памятью блокируют адресное пространство, так что что в лоб что по лбу.
Разве что ты арену себе заведешь свою с кастомным алокатором — тогда да, можно на этом выиграть.
Аллокаторы как я выше написал (ЕМНИП) хэндлят аллокации по возможности не затрагивая адресное пространство всего потока
Loyd
Loyd
Loyd
Ладно, надо просто почитать нормально jemalloc доку
Маjко
Не уходить из юзерспейса всегда дешевле
Loyd
ежу понятно
Маjко
Так что для меня это тож загадка
Маjко
Зачем jemalloc так делает
Маjко
Но видимо чисто на юзерспейсе выигрыш есть
Vladimir
а причем там разница процесс/поток?
Маjко
В тред приграшаются затычки в каждой бочке, которые знают всё
Vladimir
жемалок научился шарить аллокатор между процессами?
Маjко
Маjко
Я возможно сам себя сейчас мислиднул насчет блокирования на операциях с VM
Маjко
Надо тож почитать поподробнее
Loyd
Чёт кроме mmap/munmap ничего из сисколов не нахожу в jemalloc-е
Loyd
Ткнёшь?
Маjко
Память не сисколами выделяется, ммапается и потом по дереференсу ядро прерывается процессором на выделить физическую память
Loyd
Loyd
Маjко
(но это не точно)
Loyd
Маjко
Конечно нет
Loyd
В винде таки вроде не так, ибо там не дадут тебе сто раз подрят сделать malloc(4гиб), в отличие от
Loyd
Не
Тогда что за мини-хип, если он и так ничего не шарит?
Loyd
Ладно, RTFM, видимо (
Маjко
Маjко
Loyd
Ну, верно. Ибо он на процесс работает
Loyd
Или ты про мини-хипы на потоки?
Маjко
Но один поток не мешает другому с памятью работать, это на сколько я понял
Маjко
Да, у каждого потока
Маjко
Не процесса
Loyd
Хм, надо почитать
Loyd
Не проще было на процесс, но lock-free?
Маjко
Хз, не уверен, что это возможно
Маjко
Структурки данных то из двух потоков лок фри менять не комильфо
Маjко
Если только аллокатор не на расте либой
Маjко
С бороучекером
Маjко
На mpsc
Маjко
с crossbeam
Маjко
В скопед треде
պլհկ
Напомню что потоки на ядра могут быть раскиданы и нума ноды
պլհկ
Потому тред-локал хип дешевле
Vladimir
интересная логика