Se si desidera solo per ottenere la posizione da cui è richiesta grande quantità di memoria, Il modo più semplice sarebbe quella di rattoppare malloc
funzione o creare una nuova libreria con malloc
chiamata e monitorare la dimensione a formare la vostra malloc function
. Non sto parlando di implementare la chiamata malloc. LD_PRELOAD questa libreria per la tua applicazione.
ecco un esempio di codice:
/*
* gcc -shared -fPIC foo.c -ldl -Wl,-init,init_lib -o libfoo.so
*
* LD_PRELOAD this library in the environment of the target executable
*
*/
#include <stdio.h>
#include <sys/time.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <sys/errno.h>
#ifndef RTLD_NEXT
#define RTLD_NEXT ((void *)-1)
#endif
int init_lib(void)
{
return 0;
}
void *malloc(size_t size)
{
/* do required checks on size here */
return ((void* (*)(size_t))(dlsym(RTLD_NEXT, "malloc")))(size);
}
Si può benissimo modificare questo codice per fare alcune cose aggiuntive.
fonte
2011-01-04 13:09:37
È per memoria heap. Il codice utilizza una grande quantità di dati e ho bisogno di sapere in quale funzione lo sta allocando. Sebbene la deallocazione possa avvenire in un'altra funzione, se la funzione A alloca 16 Gb e la macchina ha 8 Gb il computer inizia lo scambio (e non importa se la funzione successiva B la dealligherà). – lezo
Perché è necessario assegnare 16 G di memoria contemporaneamente? Penso che dovresti riconsiderare le tue esigenze e il tuo design. –
@ Vikram.exe - hai ragione, ma per rispondere a questa domanda ha bisogno dei risultati del profiler :-) (Ricorda che potrebbe mantenere il codice scritto da qualcun altro, e anche se non lo è, comportamento nella vita reale di sistemi può spesso essere imprevedibile :-) – psmears