Microsoft hat de koade iepene foar it mimalloc-ûnthâldallokaasjesysteem

Microsoft hat in bibleteek iepene ûnder de MIT-lisinsje mmalloc út ymplemintaasjes fan in ûnthâld tawizing systeem oarspronklik makke foar runtime komponinten fan talen Koka и Lean. Mimalloc is oanpast foar gebrûk yn standertapplikaasjes sûnder har koade te feroarjen en kin fungearje as in transparante ferfanging foar de malloc-funksje. Unterstützt wurk op Windows, macOS, Linux, BSD en oare Unix-like systemen.

It wichtichste skaaimerk fan mimalloc is syn kompakte ymplemintaasje (minder dan 3500 rigels koade) en heul hege prestaasjes. YN tests útfierd mimalloc prestearre alle konkurrearjende ûnthâld tawizing biblioteken, ynklusyf jemalloc, tcmalloc, snmalloc, rpmalloc и Hoard.

Om evaluearje prestaasjes, in set fan besteande standert tests Yn guon tests is mimalloc in protte kearen rapper dan oare systemen; Bygelyks, yn 'e test fan objektmigraasje tusken ferskate triedden, die bliken dat mimalloc mear dan 2.5 kear rapper wie dan tcmalloc en jemalloc. Tagelyk wurdt yn 'e measte tests ek legere ûnthâldferbrûk waarnommen; yn guon situaasjes kin ûnthâldferbrûk mei 25% wurde fermindere.

Microsoft hat de koade iepene foar it mimalloc-ûnthâldallokaasjesysteem

Hege prestaasje wurdt berikt benammen troch it brûken fan frije list shading. Ynstee fan ien grutte list, mimalloc brûkt in rige fan lytsere listen, elk dêrfan is bûn oan in ûnthâld side. Dizze oanpak ferleget fragmintaasje en fergruttet de lokaasje fan gegevens yn it ûnthâld. In ûnthâldside is in groepearre set fan blokken fan ferlykbere grutte. Op 64-bit systemen is de sidegrutte typysk 64 KB. As der gjin besette blokken oerbleaun binne op 'e side, wurdt it folslein befrijd en wurdt it ûnthâld weromjûn nei it bestjoeringssysteem, wat de ûnthâldkosten en fragmintaasje yn langrinnende programma's ferminderet.

De bibleteek kin wurde opnaam yn it keppelingsstadium of laden foar in al gearstald programma ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). De biblioteek biedt ek API foar it yntegrearjen fan funksjonaliteit yn runtime en fynkorrelige gedrachskontrôle, Bygelyks, foar it ferbinen fan fertrage ûnthâld release handlers en monotoanysk tanimmende referinsje counters. It is mooglik om ferskate "heaps" te meitsjen en te brûken yn in applikaasje foar ferdieling oer ferskate ûnthâldgebieten. It is ek mooglik om de heap hielendal frij te meitsjen, sûnder troch te gean en apart de objekten dy't deryn pleatst te befrijen.

It is mooglik om de bibleteek yn in feilige modus te bouwen, wêryn spesjale siden foar ûnthâldkontrôle (wacht-siden) wurde ferfongen by de blokgrinzen, en randomisaasje fan blokferdieling en fersifering fan listen fan befrijde blokken wurde brûkt. Sokke maatregels meitsje it mooglik om te blokkearjen meast foarkommende techniken foar it eksploitearjen fan heap-basearre buffer oerstreamingen. As jo ​​de feilige modus ynskeakelje, nimt de prestaasjes ôf mei likernôch 3%.

Under de skaaimerken fan mimalloc wurdt ek opmurken dat it is net gefoelich foar problemen mei bloating fanwege grutte fragmintaasje. Yn it slimste senario nimt ûnthâldferbrûk ta mei 0.2% foar metadata en kin 16.7% berikke foar ferspraat ûnthâld. Om konflikten te foarkommen by tagong ta boarnen, brûkt mimalloc allinich atomêre operaasjes.

Boarne: opennet.ru

Add a comment