Changes between Version 31 and Version 32 of AS6-TME-B6
- Timestamp:
- Mar 29, 2022, 2:33:30 PM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AS6-TME-B6
v31 v32 183 183 * `void * malloc(size_t)` et `void free(void *)`. 184 184 * Non, ces fonctions ne font pas d'appel système à chaque fois. L'allocateur de la libc se fait alloué un segment assez grand par l'appel système `sbrk_heap` et ensuite, il alloue des segments (nommés blocs dans le cours) et les libère à la demande. 185 * L'appel système, c'est pour demander un peu plus plus pour `malloc `, mais `free` ne demande jamais de réduire l'espace.185 * L'appel système, c'est pour demander un peu plus plus pour `malloc()`, mais `free()` ne demande jamais de réduire l'espace. 186 186 ''' 187 187 }}} … … 189 189 {{{#!protected ------------------------------------------------------------------ 190 190 ''' 191 * 191 * Alors, `free()` doit retrouver la taille allouée. Il y avait plusieurs possibilités, celle choisie est la plus simple, elle consiste à ce que le premier mot du bloc alloué est utilisé pour stocker la taille du bloc. 192 * Ainsi, si `free()` reçoit en argument l'adresse A, alors la taille du bloc est à l'adresse A-4. 193 * Ce mot d'information est nommé `block_info`, il contient la taille en ligne de cache (ça économise des bits), un bit d'état (bloc `full` ou `empty`) et un numéro magic pour repérer d'éventuelles corruptions des données. 192 194 ''' 193 195 }}}