Wenn Sie nur den Ort, von dem große Menge an Speicher bekommen angefordert wird, wäre die einfachste Art und Weise malloc
Funktion oder erstellen Sie eine neue Bibliothek mit malloc
Aufruf patchen und verfolgen die Ihre Größe malloc function
bilden. Ich spreche nicht über die Umsetzung der Malloc Call. LD_PRELOAD diese Bibliothek zu Ihrer Anwendung.
hier ist ein Beispielcode:
/*
* 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);
}
Sie können diesen Code sehr gut ändern einige zusätzliche Dinge zu tun.
Ist für Heap-Speicher. Der Code verwendet eine große Menge an Daten und ich muss wissen, in welcher Funktion er es zuweist. Obwohl die Aufhebung der Zuordnung in anderen Funktionen auftreten kann, wenn die Funktion A 16 GB zuweist und die Maschine 8 GB hat, beginnt der Computer mit dem Austausch (und es spielt keine Rolle, ob die spätere Funktion B die Zuweisung aufheben wird). – lezo
Warum benötigen Sie 16 GB Speicher, der gleichzeitig zugewiesen werden muss? Ich denke, Sie sollten Ihre Anforderungen und Ihr Design überdenken. –
@ Vikram.exe - Sie haben recht, aber um diese Frage zu beantworten, benötigt er die Ergebnisse aus dem Profiler :-) (Denken Sie daran - er kann Code von jemand anderem geschrieben halten, und selbst wenn nicht, Real-Life-Verhalten von Systemen kann oft unvorhersehbar sein :-) – psmears