Changes between Version 31 and Version 32 of AS6-TME-B6


Ignore:
Timestamp:
Mar 29, 2022, 2:33:30 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AS6-TME-B6

    v31 v32  
    183183 * `void * malloc(size_t)` et `void free(void *)`.
    184184 * 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.
    186186'''
    187187}}}
     
    189189{{{#!protected ------------------------------------------------------------------
    190190'''
    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.
    192194'''
    193195}}}