SEPC FAQ Tp Allocateur

De Ensiwiki
Aller à : navigation, rechercher
  1. Est-ce que l'on peut utiliser des malloc/calloc, etc. ?
    • Non, la seule allocation dynamique autorisée est dans mem_init() pour allouer zone_memoire.
  2. Dans les variantes buddy, comment déclarer la TZL sans allocation dynamique ?
    • La TZL contient un nombre fixe de pointeurs (un par taille de bloc possible). Elle peut donc être déclarée statiquement.
  3. J'obtiens une erreur lorsque j'essaie de déréférencer un pointeur de type void*.
    • Un void* ne peut pas être déréférencé car le système ne connait pas le type de données stockées à cette adresse. Deux solutions sont possibles :
      • Si on connait le type de données stockées à cette adresse, on peut caster le pointeur avant de le manipuler. Par exemple si void* p pointe vers un int, on peut faire : *((int*)p).
      • Sinon, on peut utiliser des void ** (des pointeurs de pointeurs) qui peuvent être déréférencés.
  4. Comment allouer des blocs de taille inférieure à la taille des informations à stocker dans une zone libre (par exemple, plus petite que la taille d'un pointeur) ?
    • Si la taille demandée est plus petite que la taille des informations à stocker, il faut allouer des blocs de taille plus grande que ce qui est demandé (au moins la taille des informations à stocker). Attention à bien libérer la bonne taille de bloc lors de la libération de ce type de bloc.


Revenir à la page SEPC