Microsoft ka hapur kodin për sistemin e alokimit të memories mimalloc

Microsoft ka hapur një bibliotekë nën licencën MIT mmalloc nga implementimet e një sistemi të alokimit të memories së krijuar fillimisht për komponentët e kohës së ekzekutimit të gjuhëve Koka и Lean. Mimalloc është përshtatur për përdorim në aplikacione standarde pa ndryshuar kodin e tyre dhe mund të veprojë si një zëvendësim transparent për funksionin malloc. Mbështet punën në Windows, macOS, Linux, BSD dhe sisteme të tjera të ngjashme me Unix.

Tipari kryesor i mimalloc është zbatimi i tij kompakt (më pak se 3500 rreshta kodi) dhe performanca shumë e lartë. NË testet e kryera mimalloc ia kaloi të gjitha bibliotekave konkurruese të alokimit të memories, duke përfshirë jemalloc, tcmalloc, snmalloc, rpmalloc и grumbulloj.

Për të vlerësuar performancën, një grup ekzistues testet standarde Në disa teste, mimalloc është shumë herë më i shpejtë se sistemet e tjera; për shembull, në testin e migrimit të objekteve midis fijeve të ndryshme, mimalloc doli të ishte më shumë se 2.5 herë më i shpejtë se tcmalloc dhe jemalloc. Në të njëjtën kohë, në shumicën e testeve, vërehet gjithashtu konsum më i ulët i memories; në disa situata, konsumi i kujtesës mund të reduktohet me 25%.

Microsoft ka hapur kodin për sistemin e alokimit të memories mimalloc

Performanca e lartë arrihet kryesisht përmes përdorimit të ndarjes së listës falas. Në vend të një liste të madhe, mimalloc përdor një seri listash më të vogla, secila prej të cilave është e lidhur në një faqe memorie. Kjo qasje redukton fragmentimin dhe rrit lokalitetin e të dhënave në memorie. Një faqe memorie është një grup i grupuar blloqesh me madhësi të ngjashme. Në sistemet 64-bit, madhësia e faqes është zakonisht 64 KB. Nëse nuk ka mbetur asnjë blloqe të zënë në faqe, ajo çlirohet plotësisht dhe memoria kthehet në sistemin operativ, gjë që redukton kostot e memories dhe fragmentimin në programet që funksionojnë gjatë.

Biblioteka mund të përfshihet në fazën e lidhjes ose të ngarkohet për një program tashmë të montuar (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Biblioteka gjithashtu ofron API për integrimin e funksionalitetit në kohën e ekzekutimit dhe kontrollin e sjelljes së imët, për shembull, për lidhjen e mbajtësve të lëshimit të memories dembel dhe numëruesit e referencës në rritje monotonike. Është e mundur të krijohen dhe përdoren disa "grumbull" në një aplikacion për shpërndarje në zona të ndryshme të memories. Është gjithashtu e mundur të lirohet tërësisht grumbulli, pa kaluar dhe duke i çliruar veçmas objektet e vendosura në të.

Është e mundur të ndërtohet biblioteka në një mënyrë të sigurt, në të cilën faqet speciale të kontrollit të memories (faqet roje) zëvendësohen në kufijtë e bllokut, dhe përdoret rastësia e shpërndarjes së bllokut dhe kriptimi i listave të blloqeve të liruara. Masa të tilla ju lejojnë të bllokoni shumicën e teknikave tipike për shfrytëzimin e tejmbushjeve të tamponit të bazuara në grumbull. Kur aktivizoni modalitetin e sigurt, performanca ulet me afërsisht 3%.

Ndër veçoritë e mimallocit, vërehet gjithashtu se nuk është i ndjeshëm ndaj problemeve me fryrje për shkak të fragmentimit të madh. Në skenarin më të keq, konsumi i memories rritet me 0.2% për meta të dhënat dhe mund të arrijë në 16.7% për memorien e shpërndarë. Për të shmangur konfliktet kur hyn në burime, mimalloc përdor vetëm operacione atomike.

Burimi: opennet.ru

Shto një koment