C'est le coeur du C, alors c'est le moment de t'y mettre...Citation:
Envoyé par progman
Visiblement, tu n'as pas compris qu'il y avait 2 variables.Citation:
Code:
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 faitCode:static void *G_p_mem;
et la globale pour le tableau d'état des blocs :Code:G_p_mem = malloc(nb_bloc * taille_bloc);
avec ceci dans init() :Code:
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: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:
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;