Commit d0ce755a authored by Robin Delbos's avatar Robin Delbos
Browse files

Version final

parent 7ea69169
No preview for this file type
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
/* zone libre et zone occupée */ /* zone libre et zone occupée */
struct fb { struct fb {
size_t size; size_t size;
bool occupied; // Vaut true si c'est coccupé et false si c'est libre bool occupied; // Vaut true si c'est occupé et false si c'est libre
struct fb* next; struct fb* next;
struct fb* predecessor; struct fb* predecessor;
}; };
...@@ -50,16 +50,6 @@ void mem_init(void* memoire, size_t taille) { ...@@ -50,16 +50,6 @@ void mem_init(void* memoire, size_t taille) {
mem_fit(&mem_fit_first); // Choix de la méthode pour remplier la zone mem_fit(&mem_fit_first); // Choix de la méthode pour remplier la zone
} }
void mem_show(void (*print)(void *, size_t, int)) {
void *current = mem.adresse;
while (current != NULL) {
struct fb *first_fb = (struct fb*)current;
if(first_fb->occupied == 1)
print(current, first_fb->size + mem.meta_size, !first_fb->occupied); //si c'est une zo, on renvoie le info de la zone sinon on ne renvoi rien
current = first_fb->next;
}
}
static mem_fit_function_t *mem_fit_fn; static mem_fit_function_t *mem_fit_fn;
void mem_fit(mem_fit_function_t *f) { void mem_fit(mem_fit_function_t *f) {
...@@ -67,7 +57,6 @@ void mem_fit(mem_fit_function_t *f) { ...@@ -67,7 +57,6 @@ void mem_fit(mem_fit_function_t *f) {
} }
void *mem_alloc(size_t taille) { void *mem_alloc(size_t taille) {
__attribute__((unused)) // juste pour que gcc compile ce squelette avec -Werror
struct fb *zone=mem_fit_fn( (struct fb*)mem.adresse, taille); //Recherche d'une zone libre struct fb *zone=mem_fit_fn( (struct fb*)mem.adresse, taille); //Recherche d'une zone libre
taille = ALIGN(taille,ALIGNMENT); taille = ALIGN(taille,ALIGNMENT);
if(taille < zone->size){ // Si la taille = la taille de la zone alors elle devient une zo sinon on créé une autre zone libre if(taille < zone->size){ // Si la taille = la taille de la zone alors elle devient une zo sinon on créé une autre zone libre
...@@ -108,6 +97,15 @@ void mem_free(void* adresse) { //on a changé le nom de l'argument car mem ét ...@@ -108,6 +97,15 @@ void mem_free(void* adresse) { //on a changé le nom de l'argument car mem ét
} }
} }
void mem_show(void (*print)(void *, size_t, int)) {
void *current = mem.adresse;
while (current != NULL) {
struct fb *first_fb = (struct fb*)current;
print(current, first_fb->size + mem.meta_size, !first_fb->occupied); //si c'est une zo, on renvoie les info de la zone sinon on ne renvoi rien
current = first_fb->next;
}
}
struct fb* mem_fit_first(struct fb *list, size_t size) { //retourne l’adresse du premier bloc libre de taille supérieure ou égale à size présent dans la liste de blocs libre dont l’adresse est list. struct fb* mem_fit_first(struct fb *list, size_t size) { //retourne l’adresse du premier bloc libre de taille supérieure ou égale à size présent dans la liste de blocs libre dont l’adresse est list.
if (size > mem.size - mem.meta_size){ if (size > mem.size - mem.meta_size){
printf("ERROR\n"); printf("ERROR\n");
......
No preview for this file type
No preview for this file type
No preview for this file type
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment