38 lines
1.3 KiB
Markdown
38 lines
1.3 KiB
Markdown
# API Gestionnaire de Mémoire (Heap)
|
|
|
|
## Description
|
|
Ce module fournit un gestionnaire de mémoire dynamique (Heap) simple pour le mode réel x86. Il utilise un algorithme **First-Fit** avec fusion des blocs libres (coalescing) lors de l'allocation pour minimiser la fragmentation.
|
|
|
|
Le segment de mémoire utilisé est défini par `MEM_HEAP_SEG` (par défaut `0x2000`, soit l'adresse physique `0x20000`).
|
|
|
|
## Structure des Données
|
|
Chaque bloc mémoire est précédé d'un en-tête de 6 octets (aligné sur 16 bits) :
|
|
|
|
| Offset | Taille | Champ | Description |
|
|
| :--- | :--- | :--- | :--- |
|
|
| +0 | 1 octet | Status | `0` = Libre, `1` = Alloué |
|
|
| +1 | 1 octet | Padding | Réservé pour l'alignement |
|
|
| +2 | 2 octets | Size | Taille des données utiles (en octets) |
|
|
| +4 | 2 octets | Next | Offset du prochain bloc (0 = Fin de liste) |
|
|
| +6 | ... | Data | Données utilisateur |
|
|
|
|
## Utilisation
|
|
L'interaction se fait principalement via la macro `MEM`.
|
|
|
|
```nasm
|
|
%include "./common/memory.asm"
|
|
|
|
; Initialisation (Obligatoire au démarrage)
|
|
MEM MEM_INIT
|
|
|
|
; Allocation de 100 octets
|
|
MEM MEM_ALLOC, 100
|
|
; AX contient le handle (offset) ou 0 si erreur
|
|
|
|
; Utilisation du pointeur
|
|
mov bx, ax ; Sauvegarde du handle
|
|
MEM MEM_RESOLVE, bx
|
|
; ES:DI pointe maintenant vers les données
|
|
|
|
; Libération
|
|
MEM MEM_FREE, bx
|