Où font malloc () / free () Stockez-vous les tailles et adresses atsortingbuées?

où malloc () et free () stockent-ils les adresses allouées et leurs tailles (Linux GCC)? J’ai lu que certaines implémentations les stockaient quelque part avant la mémoire allouée, mais je n’ai pas pu le confirmer dans mes tests.

L’arrière-plan, peut-être que quelqu’un a un autre conseil pour cela: j’essaie un peu d’parsingr la mémoire de tas d’un processus afin de déterminer la valeur actuelle d’une chaîne dans l’autre processus. Accéder à la mémoire de processus et s’y promener ne pose aucun problème. Toutefois, étant donné que la valeur de la chaîne change et que le processus alloue une nouvelle partie de la mémoire à chaque fois, l’adresse de la chaîne change. Parce que la chaîne a un format fixe, elle est toujours facile à trouver, mais après quelques modifications, les anciennes versions de la chaîne sont toujours dans la mémoire vive quelle chaîne est la chaîne actuelle.

Donc, afin de toujours trouver celle en cours, je veux vérifier si une chaîne trouvée dans la mémoire est toujours utilisée en comparant son adresse avec les adresses que malloc / free connaissent.

ciao, Elmar

Malloc / Free peut stocker la taille de la zone mémoire de plusieurs manières. Par exemple, il peut être stocké juste avant la zone renvoyée par malloc. Ou il peut être stocké dans une table de recherche ailleurs. Ou bien il peut être implicitement stocké: certaines zones peuvent être réservées pour des tailles spécifiques d’allocations.

Pour savoir comment cela fonctionne dans la bibliothèque C de Linux (glibc), obtenez le code source à l’ malloc/malloc.c http://ftp.gnu.org/gnu/glibc/ et consultez le fichier malloc/malloc.c . Il y a de la documentation en haut, qui fait référence à A Memory Allocator de Doug Lea.

Cela dépend de la mise en œuvre de la bibliothèque standard, bien sûr. Donc, votre meilleur pari serait probablement de fouiller dans la source de la bibliothèque (la glibc est la valeur par défaut sous Linux) et de voir si vous pouvez le résoudre. Cela ne va probablement pas être sortingvial.