https://www.microsoft.com/en-us/research/uploads/prod/2019/06/mimalloc-tr-v1.pdf
Mimalloc - аллокатор от MS для функциональных языков с паттерном "много маленьких аллокаций". Очень приятная, понятная инженерная статья. Лайк.
Основная идея: шардировать фри-листы на страницы (!= ОС страницы), чтобы была локальность аллокаций.
Основной путь аллокации - это всегда тред-локал список. Поэтому синхронизация нужна только при вызове фри из другого потока. Из-за таких (и других) сложностей возникают аж штуки 3-4 вида фри-листов.
Из забавного: один из счетчиков деаллокаций (thread_freed) читается неатомарно, из-за чего возникает дата рейс, но разработчики знают, что он не принесет ничего плохого, поэтому рейс посажен там специально! Ухх!
#allocator #c
Mimalloc - аллокатор от MS для функциональных языков с паттерном "много маленьких аллокаций". Очень приятная, понятная инженерная статья. Лайк.
Основная идея: шардировать фри-листы на страницы (!= ОС страницы), чтобы была локальность аллокаций.
Основной путь аллокации - это всегда тред-локал список. Поэтому синхронизация нужна только при вызове фри из другого потока. Из-за таких (и других) сложностей возникают аж штуки 3-4 вида фри-листов.
Из забавного: один из счетчиков деаллокаций (thread_freed) читается неатомарно, из-за чего возникает дата рейс, но разработчики знают, что он не принесет ничего плохого, поэтому рейс посажен там специально! Ухх!
#allocator #c