174 | | * |
175 | | ''' |
176 | | }}} |
177 | | 1. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels système ? Si oui, quand et pourquoi ? |
178 | | {{{#!protected ------------------------------------------------------------------ |
179 | | ''' |
180 | | * |
| 174 | * L'allocation ''first fit'' signifie que l'allocateur utilise le premier bloc libre assez grand pour l'objet alloué. Ce bloc libre est coupé en deux s'il est trop grand pour produire un nouveau bloc libre, mais plus petit parce que amputé de la partie alloué à l'objet. |
| 175 | * On a aussi l'allocation ''next fit'' qui consiste à ne pas partir du début dans la recherche d'un bloc libre, mais de l'endroit de la dernière affectation, et la l'allocation ''best fit'' qui consiste à trouver un bloc libre de la bonne taille en premier. |
| 176 | * Il en existe d'autres, leur but est d'augmenter les performances et de réduire la fragmentation. |
| 177 | * Il n'y a pas de meilleurs solutions, mais si on connaît la nature des besoins en terme d'allocation, on peut imaginer des mécanismes plus efficaces. |
| 178 | ''' |
| 179 | }}} |
| 180 | 1. Rappeler le nom des deux fonctions de l'API utilisateur de cet allocateur. Est-ce que ces fonctions font des appels système à chaque fois ? Si oui, quand et pourquoi ? |
| 181 | {{{#!protected ------------------------------------------------------------------ |
| 182 | ''' |
| 183 | * `void * malloc(size_t)` et `void free(void *)`. |
| 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. |