Microsoft ha aperto il codice del sistema di allocazione della memoria mimalloc

Microsoft ha aperto una libreria con licenza MIT mimalloc con implementazioni del sistema di allocazione della memoria, originariamente creato per i componenti runtime dei linguaggi Koka e Lean. Mimalloc è stato adattato per essere utilizzato in applicazioni standard senza modificare il loro codice e può fungere da sostituto trasparente della funzione malloc. Funziona in Windows, macOS, Linux, BSD e altri sistemi Unix-like.

Una delle caratteristiche chiave di mimalloc è la sua compattezza (meno di 3500 righe di codice) e l'efficienza molto elevata. Nei test condotti mimalloc ha superato in prestazioni tutte le librerie concorrenti di allocazione della memoria, comprese jemalloc, tcmalloc, snmalloc, rpmalloc e Hoard.

Per la valutazione delle prestazioni è stato utilizzato un insieme di test già esistenti test standard In alcuni test, mimalloc supera altri sistemi di parecchi ordini di grandezza; ad esempio, nel test di migrazione degli oggetti tra diversi thread, mimalloc si è rivelato più veloce di tcmalloc e jemalloc di oltre 2,5 volte. Inoltre, nella maggior parte dei test si osserva anche un consumo di memoria inferiore; in alcune situazioni è possibile ridurre il consumo di memoria del 25%.

Microsoft ha aperto il codice del sistema di allocazione della memoria mimalloc

Le elevate prestazioni sono principalmente raggiunte grazie all'uso del partizionamento della lista dei blocchi liberi (free list sharding). Invece di un'unica grande lista, mimalloc utilizza una serie di liste più piccole, ciascuna delle quali è collegata a una pagina di memoria. Questo approccio riduce la frammentazione e migliora la localizzazione dei dati in memoria. Per pagina di memoria si intende un insieme raggruppato di blocchi simili per dimensione. Su sistemi a 64 bit, la dimensione della pagina è solitamente di 64 KB. Se in una pagina non rimangono blocchi occupati, viene completamente liberata restituendo la memoria al sistema operativo, il che consente di ridurre i costi di memoria e la frammentazione nelle applicazioni a lungo termine.

La libreria può essere collegata durante la fase di collegamento o caricata per un programma già compilato ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). La libreria fornisce anche API per l'integrazione delle funzionalità in runtime e il controllo fine del comportamento, ad esempio, per collegare gestori per il rilascio di memoria ritardato e l'incremento monotono dei contatori di riferimento. È possibile creare e utilizzare più "heap" nell'applicazione per la distribuzione in diverse aree di memoria. È anche possibile liberare completamente un heap, senza dover iterare e liberare singolarmente gli oggetti in esso allocati.

È prevista la possibilità di compilare la libreria in modalità sicura, nella quale all'interfaccia dei blocchi vengono inserite pagine di memoria di controllo speciali (guard-page), e viene utilizzata anche la randomizzazione della distribuzione dei blocchi e la crittografia delle liste dei blocchi da liberare. Queste misure consentono di bloccare la maggior parte delle tecniche comuni di sfruttamento dei buffer overflow nell'heap. L'attivazione della modalità sicura comporta una riduzione delle prestazioni di circa il 3%.

Tra le caratteristiche di mimalloc si segnala la resistenza ai problemi di bloat in caso di forte frammentazione. Nel peggior scenario, il consumo di memoria aumenta dello 0,2% per i metadati e può raggiungere il 16,7% per la memoria allocata. Per evitare 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