Кампанія Miсrosoft адкрыла пад ліцэнзіяй MIT бібліятэку
Ключавой асаблівасцю mimalloc з'яўляецца кампактнасць рэалізацыі (менш, чым 3500 радкоў кода) і вельмі высокая прадукцыйнасць. У
Для адзнакі прадукцыйнасці выкарыстаны набор ужо існых
Высокая прадукцыйнасць дасягаецца ў асноўным за кошт ужывання сегментавання спісу вольных блокаў (free list sharding). Замест аднаго вялікага спісу ў mimalloc ужываецца падзел на серыю драбнейшых спісаў, кожны з якіх прывязваецца да старонкі памяці. Падобны падыход змяншае фрагментацыю і павялічвае лакалізацыю дадзеных у памяці. Пад старонкай памяці разумеецца згрупаваны набор блізкіх па памеры блокаў. На 64-разрадных сістэмах памер старонкі звычайна складае 64 КБ. У выпадку, калі ў старонцы не застаецца занятых блокаў, яна цалкам вызваляецца з вяртаннем памяці аперацыйнай сістэме, што дазваляе зменшыць выдаткі памяці і фрагментацыю ў працяглых праграмах.
Бібліятэку можна падлучыць на этапе звязвання або падгрузіць для ўжо сабранай праграмы ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). У бібліятэцы таксама прадастаўляецца
Прадугледжана магчымасць зборкі бібліятэкі ў бяспечным рэжыме, у якім на граніцы блокаў ажыццяўляецца падстаноўка спецыяльных праверачных старонак памяці (guard-page), а таксама выкарыстоўваецца рандамізацыя размеркавання блокаў і шыфраванне спісаў вызваляемых блокаў. Падобныя меры дазваляюць блакаваць большасць тыпавых тэхнік эксплуатацыі перапаўненняў буфераў у кучы. Пры ўключэнні бяспечнага рэжыму прадукцыйнасць зніжаецца прыкладна на 3%.
З асаблівасцяў mimalloc таксама адзначаецца не схільнасць праблемам з разадзьмутыя пры вялікай фрагментацыі. У найгоршым сцэнары спажыванне памяці ўзрастае на 0.2% для метададзеных і можа дасягаць 16.7/XNUMX% для размеркаванай памяці. Для выключэння канфліктаў пры доступе да рэсурсаў у mimalloc прымяняюцца толькі атамарныя аперацыі.
Крыніца: opennet.ru