Oltre a ispezione esterna, è anche possibile strumento l'implementazione di malloc per farvi ispezionano le statistiche. jemalloc
e tcmalloc
sono implementazioni che, oltre a funzionare meglio per il codice multithreading che le tipiche implementazioni di libc, aggiungono alcune funzioni di utilità di quel tipo.
Per approfondire, è necessario imparare un po 'di più su come funziona l'allocazione dell'heap. In definitiva, il sistema operativo è quello che assegna la memoria ai processi mentre lo chiedono, tuttavia le richieste al sistema operativo (syscalls) sono più lente delle normali chiamate, quindi in generale un'implementazione di malloc
richiederà blocchi di grandi dimensioni al sistema operativo (blocchi 4KB o 8KB sono comuni) e li suddividono per servirli ai suoi chiamanti.
È necessario identificare se si è interessati alla memoria totale consumata dal processo (che include il codice stesso), alla memoria il processo richiesto dal sistema operativo in una particolare chiamata di procedura, la memoria effettivamente utilizzata dallo malloc
implementazione (che aggiunge il proprio overhead di libro, per quanto piccolo) o la memoria è richiesta.
Inoltre, la frammentazione può essere un dolore per gli ultimi due e può in qualche modo offuscare le differenze tra realmente utilizzato e assegnato a.
fonte
2012-03-17 15:24:28
nuovo e malloc non usano la stessa regione ... – UmNyobe
@UmNyobe: Questo è strano, dato che in genere 'new' chiama' :: operator new() ', che a sua volta viene solitamente implementato tramite' malloc() ' ... –
http://stackoverflow.com/questions/1350819/c-free-store-vs-heap – UmNyobe