Microsoft ha rilasciato il codice del sistema di distribuzione della memoria mimalloc

L'azienda Microsoft ha rilasciato una libreria sotto licenza MIT mimalloc con l'implementazione di un sistema di allocazione della memoria, originariamente creato per i componenti runtime dei linguaggi Koka e Lean. Mimalloc è progettato per essere utilizzato in applicazioni standard senza modificare il loro codice e può fungere da sostituzione trasparente della funzione malloc. È supportato su Windows, macOS, Linux, BSD e altri sistemi simili a Unix.

Una caratteristica chiave di mimalloc è la compattezza dell'implementazione (meno di 3500 righe di codice) e l'alta prestazione. Nei test condotti mimalloc ha superato in prestazioni tutte le librerie concorrenti di allocazione della memoria, comprese jemalloc, tcmalloc, snmalloc, rpmalloc e Hoard.

Per valutare le prestazioni è stato utilizzato un insieme di test standard In alcuni test, mimalloc ha superato altre soluzioni di diversi ordini di grandezza; ad esempio, nel test di migrazione degli oggetti tra thread diversi, mimalloc è risultato più veloce di tcmalloc e jemalloc di oltre 2,5 volte. Inoltre, nella maggior parte dei test si osserva anche un minore consumo di memoria, in alcune situazioni il consumo di memoria può essere ridotto del 25%.

Microsoft ha rilasciato il codice del sistema di distribuzione della memoria mimalloc

L'alta prestazione è raggiunta principalmente grazie all'uso del partitioning delle liste di blocchi liberi (free list sharding). Invece di un'unica grande lista, mimalloc utilizza la suddivisione in una serie di liste più piccole, ciascuna legata a una pagina di memoria. Questo approccio riduce la frammentazione e migliora la localizzazione dei dati in memoria. Con pagina di memoria si intende un insieme raggruppato di blocchi simili per dimensione. Su sistemi a 64 bit, la dimensione della pagina è normalmente di 64 KB. Nel caso in cui non ci siano blocchi occupati in una pagina, viene completamente liberata restituendo memoria al sistema operativo, riducendo così l'overhead di memoria e la frammentazione nelle applicazioni a lungo termine.

La libreria può essere collegata durante il linking o caricata per un programma già compilato ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). La libreria fornisce anche API per integrare funzionalità in runtime e gestire finemente il comportamento, ad esempio per collegare gestori di rilascio della memoria ritardato e per l'incremento monotono dei contatori di riferimento. È possibile creare e utilizzare nell'applicazione più "heap" per la distribuzione in diverse aree di memoria. È anche possibile liberare completamente l'heap, senza scorrere e liberare singolarmente gli oggetti allocati al suo interno.

È prevista la possibilità di compilare la libreria in modalità sicura, in cui ai confini dei blocchi viene effettuata l'inserzione di pagine di memoria di controllo (guard-page) e viene utilizzata anche la randomizzazione della distribuzione dei blocchi e la crittografia delle liste dei blocchi liberati. Queste misure consentono di bloccare la maggior parte delle tecniche standard di sfruttamento delle vulnerabilità da overflow del buffer nell'heap. L'attivazione della modalità sicura comporta una riduzione delle prestazioni del circa 3%.

Tra le caratteristiche di mimalloc si evidenzia anche la non vulnerabilità a problemi di espansione in caso di elevata frammentazione. Nello scenario peggiore, il consumo di memoria aumenta dello 0,2% per i metadati e può raggiungere il 16,7% per la memoria allocata. Per escludere conflitti nell'accesso alle risorse, mimalloc utilizza solo operazioni atomiche.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster