Bonjour a tous,
Dans le cadre d'un projet, je dois recoder le malloc en langage C
Je cherche un algo rapide et simple a implementer, avez vous une idee ?
Bonjour a tous,
Dans le cadre d'un projet, je dois recoder le malloc en langage C
Je cherche un algo rapide et simple a implementer, avez vous une idee ?
Bonjour, j'ai une solution simple :
Chaque allocation sera, en interne, représentée par un bloc en-tête et un bloc données, tous deux adjacents.
L'en-tête, de taille fixe, contient la taille du bloc de données, l'état du bloc (libre ou réservé), l'adresse (relative) du bloc en-tête précédent et celle du bloc suivant.
Ainsi, le gestionnaire de mémoire n'a que peu d'opérations à faire :
- Initialisation
- Créer un segment mémoire (partagée / dans un fichier / managée / ...) ;
- Créer le bloc en-tête maître {size=taille_segment - taille_d_un_en_tete; free=true; previous=NULL; next=NULL}
- Allocation
- Recherche d'un bloc libre de taille suffisante : depuis le bloc maître, tant que bloc_courant.free=false && size<taille_a_allouer+taille_d_un_en_tete, passer au bloc suivant.
- Réservation du bloc : LAL
- Désalocation : LAL aussi, mais attention au piège, il faut fusionner les blocs libres contigüs
.
N'hésite pas à partager ton gestionnaire de mémoire une fois cela fait. Si tu as accès à un compilateur C++, tu peux aussi l'encapsuler dans la classe std::Alocator qui permet de gérer la mémoire interne des std::vector, std::map, etc.
Cdlt,
Des algos il y en a plein.
Je conseille de lire le document "Dynamic memory allocation" de 'Alan L. Cox' pour se faire une idée sur l'implémentation d'un allocateur utilisant les free-list.
Sinon, pour la beauté de l'algorithme, je conseille la technique de "Buddy memory allocation".![]()
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Merci !
je n'ai le droit que d'utiliser brk et sbrk, pensez vous que le first fit est une bonne solution ?
Partager