Маjко
Loyd
Хуй знает, надо бенчи сделать
Маjко
аллокаторы умеют оптимизировать
Маjко
Лики?
Loyd
аллокаторы умеют оптимизировать
Вот тут не понял, как связано с компилятором
Маjко
С компилятором никак, но в RAII боттлнек в том, что деаллокация происходит всегда при выходе из скопа. А она как бы не мгновенная. Аллокаторы делают отложенную деаллокацию и/или переиспользуют локальный буффер аллокатора треда, не делая вообще никаких действий при возможности
Loyd
Хм, интересно
Loyd
Где почитать?
Маjко
Пфф... щас, так прям не вспомню, это больше остаточные знания без привязанного источника
Loyd
Но это все равно аллокатор, прибитый к компилятору. В каком-нибудь jemallocе не сделать
Loyd
Ибо инфы нет, что деаллок во время выхода из скопа, очевидно
Маjко
Почитай про jemalloc, вообще
Маjко
Сорцы Box, реализация Drop
Маjко
И прочие деструкторы в крестах
Loyd
А, в смысле в обертке (деструктор) оптимизация, а не в аллокаторе
Маjко
А что там оптимизировать?
Маjко
Он вызывает аллокатор
Loyd
Ну вот отложенная деаллокация
Маjко
Это часть алгоритма аллокатора
Loyd
Где код, который откладывает?
Маjко
В аллокаторе)
Сережа
а бля
Сережа
shared внутри атомик
Loyd
Ну и когда таки реальная деаллок я происходит?
Vladimir
насчет деаллокации, то зачем нужна какая-то дополнительная информация о том вышел объект из скопа
Vladimir
Ну и когда таки реальная деаллок я происходит?
ну мне кажется это разумным менеджить память в отдельном потоке
Маjко
Не нашел пруфлинк, с доками у этих штук вечные проблемы Но ЕМНИП, у jemalloс есть на каждый тред свой мини-хип, который он переиспользует, чтобы не блокировать всё приложение на время аллокации/деаллокации.
Маjко
ну мне кажется это разумным менеджить память в отдельном потоке
Не, операции с памятью блокируют адресное пространство, так что что в лоб что по лбу. Разве что ты арену себе заведешь свою с кастомным алокатором — тогда да, можно на этом выиграть. Аллокаторы как я выше написал (ЕМНИП) хэндлят аллокации по возможности не затрагивая адресное пространство всего потока
Маjко
Ну так работа с этим мини-хипов тож не бесплатная, наверное
Почти бесплатная по сравнению с запросами у ОС, которые вешают процесс
Loyd
насчет деаллокации, то зачем нужна какая-то дополнительная информация о том вышел объект из скопа
Ну, free разный бывает. Я к тому, что как минимум нужен free_now в таком случае
Loyd
Loyd
Ладно, надо просто почитать нормально jemalloc доку
Маjко
Не понял, зачем ему просить у ОС что-то, кроме brk?
Странички подпихнуть свежие, непрерывный участок памяти там, итд
Маjко
Не уходить из юзерспейса всегда дешевле
Loyd
ежу понятно
Маjко
Почти бесплатная по сравнению с запросами у ОС, которые вешают процесс
Хотя в линуксах разница между процессом и потоком не существует для ОС
Маjко
Так что для меня это тож загадка
Маjко
Зачем jemalloc так делает
Маjко
Но видимо чисто на юзерспейсе выигрыш есть
Vladimir
а причем там разница процесс/поток?
Маjко
В тред приграшаются затычки в каждой бочке, которые знают всё
Vladimir
жемалок научился шарить аллокатор между процессами?
Маjко
Я возможно сам себя сейчас мислиднул насчет блокирования на операциях с VM
Маjко
Надо тож почитать поподробнее
Loyd
Чёт кроме mmap/munmap ничего из сисколов не нахожу в jemalloc-е
Loyd
Ткнёшь?
Маjко
Память не сисколами выделяется, ммапается и потом по дереференсу ядро прерывается процессором на выделить физическую память
Маjко
А mmap, по-твоему, не сискол?
Я к тому что там не будет других сисколлов)
Маjко
(но это не точно)
Ма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
интересная логика