2013-06-05 15 views
8

Vorrei utilizzare un allocatore di funzioni generiche ad alte prestazioni come jemalloc/tcmalloc con un pool di memoria. C'è una guida per farlo? Non voglio utilizzare jemalloc/tcmalloc come sostituzione drop-in per malloc.Utilizzo di tcmalloc/jemalloc con gestore pool di memoria personalizzato

Ho pool di memoria che utilizza libarena e ritaglia un'area di memoria più ampia (2 GB). Voglio creare un pool di oggetti di dimensioni fisse come gslice su questa arena per dire 1 GB. (come l'allocatore di lastre Bonwick) e si desidera utilizzare il resto della memoria per l'allocazione generale di dimensioni variabili. Mi piacerebbe avere jemalloc/tcmalloc utilizzare questa area di memoria. È possibile? Qualche idea su come posso procedere? Se c'è una libreria alternativa, mi piacerebbe sentirla anche a questo proposito.

+1

Buona fortuna ottenere questa risposta, ho anche voluto davvero questa risposta, per favore vedi la mia domanda http://stackoverflow.com/questions/23341587/malloc-like-function-using-custom-heap. – Vality

+0

Ho scritto un allocatore specifico per la nostra app. Una cosa che si è rivelata una vera idea elegante era il concetto di ridurre tutte le possibili allocazioni a un piccolo numero di dimensioni "quantiche". Sotto 4k = 8 byte, 4k..16k = 16 byte ... fino a 64mb max. Ho finito con solo circa 1000 diverse dimensioni fino a 64 MB. Ram sperperato era basso poiché la dimensione dello spazio sprecato era una funzione della dimensione dell'allocazione. Questo ha permesso di riciclare pile per ogni dimensione. Un libero era solo una spinta e un alloc era un pop, a meno che la pila fosse vuota per quella dimensione. – johnnycrash

+0

Non ho una risposta per te, ma potresti trovare alcune informazioni utili su questo thread jemalloc riguardante l'allocazione della memoria come arene aggiuntive per gli allocatori personalizzati qui: http://www.canonware.com/pipermail/jemalloc-discuss/2015 -Gennaio/000988.html – acanaday

risposta

2

Questa è una domanda vecchia, ma c'è infine una risposta positiva, almeno per quanto riguarda lo jemalloc. Dal jemalloc versione 4.0.0, è possibile utilizzare mallctl per impostare hook per le allocazioni chunked che ottengono memoria utilizzando l'interfaccia arena.<i>.chunk_hooks. Questi hook sono ben documentati nello jemalloc manpage, incluso un numero di riferimenti incrociati.

Non sono a conoscenza di un'interfaccia simile in tcmalloc; Io non lo uso.

Ho risposto a uno similar question semi-recentemente; potrebbero esserci utili informazioni anche lì.

Problemi correlati