Microsoft ha obert el codi per al sistema d'assignació de memòria mimalloc

Microsoft ha obert una biblioteca sota la llicència MIT mmalloc a partir d'implementacions d'un sistema d'assignació de memòria creat originalment per a components d'execució dels llenguatges Koka и "Lean". Mimalloc està adaptat per al seu ús en aplicacions estàndard sense canviar el seu codi i pot actuar com a substitut transparent de la funció malloc. Admet el treball a Windows, macOS, Linux, BSD i altres sistemes semblants a Unix.

La característica clau de mimalloc és la seva implementació compacta (menys de 3500 línies de codi) i un alt rendiment. EN proves realitzades mimalloc va superar totes les biblioteques d'assignació de memòria competidores, incloses jemalloc, tcmalloc, snmalloc, rpmalloc и Acaparat.

Per avaluar el rendiment, un conjunt d'existents proves estàndard En algunes proves, mimalloc és moltes vegades més ràpid que altres sistemes; per exemple, en la prova de migració d'objectes entre diferents fils, mimalloc va resultar ser més de 2.5 vegades més ràpid que tcmalloc i jemalloc. Al mateix temps, en la majoria de proves, també s'observa un menor consum de memòria; en algunes situacions, el consum de memòria es pot reduir en un 25%.

Microsoft ha obert el codi per al sistema d'assignació de memòria mimalloc

L'alt rendiment s'aconsegueix principalment mitjançant l'ús de llistes de fragmentació gratuïtes. En lloc d'una llista gran, mimalloc utilitza una sèrie de llistes més petites, cadascuna de les quals està vinculada a una pàgina de memòria. Aquest enfocament redueix la fragmentació i augmenta la localitat de les dades a la memòria. Una pàgina de memòria és un conjunt agrupat de blocs de mida similar. En sistemes de 64 bits, la mida de la pàgina sol ser de 64 KB. Si no queden blocs ocupats a la pàgina, s'allibera completament i la memòria es retorna al sistema operatiu, la qual cosa redueix els costos de memòria i la fragmentació en programes de llarga durada.

La biblioteca es pot incloure en l'etapa d'enllaç o carregar-se per a un programa ja muntat ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). La biblioteca també ofereix API per integrar la funcionalitat en el temps d'execució i el control de comportament detallat, per exemple, per connectar controladors d'alliberament de memòria retardat i comptadors de referència que augmenten monòtonament. És possible crear i utilitzar diversos "munts" en una aplicació per distribuir-los a diferents àrees de memòria. També és possible alliberar el munt completament, sense passar i alliberant per separat els objectes col·locats en ell.

És possible construir la biblioteca en un mode segur, en què les pàgines especials de comprovació de memòria (pàgines de guarda) es substitueixen als límits del bloc, i s'utilitza l'aleatorització de la distribució de blocs i el xifratge de llistes de blocs alliberats. Aquestes mesures permeten bloquejar les tècniques més habituals per explotar desbordaments de memòria intermèdia basats en munt. Quan activeu el mode segur, el rendiment disminueix aproximadament un 3%.

Entre les característiques de mimalloc, també s'observa que no és susceptible a problemes d'inflor a causa de la gran fragmentació. En el pitjor dels casos, el consum de memòria augmenta un 0.2% per a les metadades i pot arribar al 16.7% per a la memòria distribuïda. Per evitar conflictes en accedir als recursos, mimalloc utilitza només operacions atòmiques.

Font: opennet.ru

Afegeix comentari