ALLOCMEM |
Alloue de la mémoire |
---|---|
Turbo C | dos.h |
Syntaxe
int allocmem(unsigned size,unsigned *segp); |
Paramètres
Nom | Description |
---|---|
size | Ce paramètre permet d'indiquer la quantité de mémoire en paragraphe de 16 octets. |
segp | Ce paramètre contient un pointeur retournant l'adresse de segment de la mémoire alloué. |
Retour
Valeur | Description |
---|---|
-1 | Cette valeur permet d'indiquer que l'opération d'allocation s'est correctement déroulé. |
0 ou supérieur | Ces valeurs permettent d'indiquer la quantité de paragraphe (16 octets) disponible. |
Description
Cette fonction permet d'effectuer de l'allocation de mémoire sur le tas du système d'exploitation DOS.
Remarques
- On utilisera la fonction «freemem» afin de libérer la mémoire alloué par cette fonction.
- Si la quantité de mémoire de 640 Ko n'est pas suffisante pour vos besoins, vous devriez envisager d'utiliser le partagiciel «VGARAM» de Brett Warthen qu'il a développé en 1990, lequel offre la possibilité de prendre les 96 Ko suivant la mémoire conventionnelle qu'utilise la carte vidéo VGA et de l'ajouter aux 640 Ko de façon à obtenir un total de 736 Ko pour votre mémoire conventionnel !
- Les microprocesseurs 80x86 utilisent un adressage de la mémoire selon le format suivant «segment:offset». Toutefois, cette fonction utilise toujours un déplacement (offset) égalant à 0, donc vous aurez toujours une adresse «segment:0».
- Lorsque l'adressage utilise uniquement par la partie segment pour se repérer, on dit qu'on réservé une quantité de mémoire réservé en paragraphe. Un paragraphe correspond à 16 octets.
- La fonction allocmem utilise l'appel système 0x48 du DOS pour allouer un bloc de mémoire libre et renvoie l'adresse de segment du bloc alloué.
- Le paramètre size est la taille souhaitée dans les paragraphes (un paragraphe fait 16 octets). Le paramètre segp est un pointeur vers un mot se voyant attribuer l'adresse de segment du bloc nouvellement alloué. Aucune attribution n'est faite au mot indiqué par le paramètre segp si l'espace disponible est insuffisant.
- La fonction allocmem renvoie -1 en cas de succès. En cas d'erreur, un nombre (la taille en paragraphes du plus grand bloc disponible) est renvoyé.
- Un retour d'erreur de la fonction allocmem définira _doserrno et définira la variable globale errno sur la constante ENOMEM (mémoire insuffisante).
- La fonction allocmem est uniquement disponible sous le système d'exploitation DOS.
Exemple
Voici un exemple montrant comment alloué 16000 octets de mémoire :
- #include <stdio.h>
- #include <stdlib.h>
- #include <dos.h>
-
- int main(int argc, char* argv[]) {
- unsigned SegmentAddress;
- int Status=allocmem(1000,&SegmentAddress);
- if(Status == -1) {
- printf("La mémoire a été alloué correctement !\n");
- } else {
- printf("Erreur, il n'a pas été possible d'alloué de la mémoire !\n");
- printf("Paragraphe disponible = %i\n",Status);
- }
- return 0;
- }
on obtiendra le résultat suivant s'il y a assez de mémoire :
La mémoire a été alloué correctement !Voir également
Langage de programmation - Turbo C - Référence de fonctions - freemem
Langage de programmation - Turbo C - Référence de fonctions - setblock
Langage de programmation - Turbo C - Référence de fonctions - calloc
Langage de programmation - Turbo C - Référence de fonctions - malloc
Dernière mise à jour : Jeudi, le 23 juillet 2015