C'est le coeur du C, alors c'est le moment de t'y mettre...Envoyé par progman
Visiblement, tu n'as pas compris qu'il y avait 2 variables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 static void *tab_mem_malloc; ... struct addr_t { void *address; unsigned char flag; }; ... tab_mem_malloc=(struct addr_t *)malloc(block_nb);
- le bloc de donnée préalloué qui va servir à l'allocation des petits blocs
- le tableau de structure sui sert à memoriser l'état des petits blocs. (adresse, libre/ocupé)
La globale pour le bloc est, par exemple :
et dans init(), on fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part static void *G_p_mem;
et la globale pour le tableau d'état des blocs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part G_p_mem = malloc(nb_bloc * taille_bloc);
avec ceci dans init() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 static struct bloc { void *address; int libre; } *G_a_blocs;
EDITEnsuite, il faut remplir le tableau de blocs avec les adresses précalculées et c'est là que ça devient interessant. (Penser aussi à affirmer le flag 'libre')
Code : Sélectionner tout - Visualiser dans une fenêtre à part G_a_blocs = malloc (sizeof *G_a_blocs * nb_bloc);
Tu verras qu'il faut aussi mémoriser le nombre et la taille des blocs. Je suggère une structure globale unique.
J'ai fait comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 struct block { void *p; int libre; }; /* globale interne */ static struct data { void *p_mem; size_t block_nb; size_t block_size; struct block *a_blocks; } G;
Partager