Allocation de tampon dynamique
Plusieurs fonctions sont fournies pour l'allocation dynamique et l'emplacement de transaction des tampons à partir d'une section de mémoire appelée mémoire de tas. Elles sont les suivantes :
Nom | Description |
---|---|
malloc | Alloue un tampon |
calloc | Alloue un tampon et l'initialise à zéro. |
realloc | Alloue plus d'espace à un tampon précédemment alloué. |
free | Libère un tampon alloué pour réutilisation. |
De plus, la fonction sbrk permet aux utilisateurs de mettre en oeuvre leur propre schéma d'allocation de tampon dynamique : lorsqu'il est passé un entier, sbrk incrémente un pointeur interne de ce montant et renvoie la valeur d'origine du pointeur. Le pointeur pointe initialement vers la base de la mémoire de tas.
Allocation dynamique des tampons d'entrée/sortie standard
Les tampons utilisés pour les entrées/sorties standard sont alloués dynamiquement à partir du tas à moins que des actions spécifiques ne soient prises par le programme de l'utilisateur. Les appels d'entrées/sorties standard pour allouer et désallouer dynamiquement des tampons peuvent être entrecoupés de ceux du programme de l'utilisateur. Les programmes exécutant des entrées/sorties standard et devant avoir un contrôle absolu sur le tas peuvent définir explicitement les tampons à utiliser par un flux de données d'entrées/sorties standard.
La mémoire de tas - positionnement de la pile
L'adresse de début dans la mémoire de tas d'un programme est attribuée lorsque le programme est lié. Lorsqu'un programme est activé, un bloc de mémoire de 2 048 octets est réservé à la pile. L'emplacement de ce bloc dépend du système, mais il est toujours au-dessus du début de la mémoire de tas. L'adresse de fin de la mémoire de tas est alors définie sur le début du segment de pile. Sur le système d'exploitation CP/M, le haut de la pile est la base des bdos de CP/M; sur TRSDOS, c'est $HIGH sur Apple DOS, c'est la base des tampons de fichiers DOS. Les tampons ne peuvent pas être alloués au-dessus de la limite de la pile de la mémoire de tas, mais rien n'empêche la pile de croître en dessous de la limite. Ceci, bien sûr, présente la possibilité que la pile écrase un tampon alloué dynamiquement. La fonction rsvstk peut être utilisée pour modifier la limite de pile de la mémoire de tas.