Les différents types utilisés en Pure Pascal sont dans cette page.
Pure Pascal en interne : Formats de données
Types entiers
Le format interne utilisé par Pure Pascal pour stocker les types entiers dépend de la plage de valeurs:- Si les limites supérieure et inférieure sont comprises entre -128 et +127, un octet signé est utilisé pour le stockage. C'est également la représentation du raccourci de type prédéfini shortint.
- Si les limites supérieure et inférieure sont comprises entre 0 et +255, un octet non signé est utilisé pour le stockage. (Type prédéfini byte)
- Si les limites supérieure et inférieure sont comprises entre -32768 et +32767, deux octets consécutifs sont utilisés, dont la valeur la plus élevée est à l'adresse inférieure et porte le signe. Pure Pascal aligne toujours l'adresse de ces variables sur une adresse paire. (Type prédéfini integer)
- Si les limites supérieure et inférieure sont comprises entre 0 et 65 535, deux octets non signés sont utilisés pour le stockage. L'octet le plus significatif se trouve à l'adresse inférieure et est toujours aligné sur une adresse paire. (Type prédéfini word)
- Sinon, quatre octets sont utilisés. L'octet le plus significatif est à l'adresse la plus basse, a le signe et est toujours aligné avec une adresse paire. (Type prédéfini longint)
Type Char
Le type de données char et ses Intervals sont toujours enregistrés en tant qu'octets non signés. Le jeu de caractères ASCII est utilisé.Type Booléen
Le type de données boolean et ses Intervals sont toujours enregistrés en tant qu'octets non signés. La valeur false est représentée par la valeur 0 (c'est-à-dire Ord(false) = 0), la valeur true par la valeur 1 (c'est-à-dire Ord (true) = 1). Le type booléen se comporte comme si sa déclaration était:En particulier, false <true.type boolean = (false, true);
Type Enumérés
Les types Enumérés sont toujours affichés sans signe. La taille dépend du nombre de valeurs. S'il y en a 256 ou moins, un octet non signé est utilisé pour le stockage, sinon deux octets. Comme toujours, l'octet d'ordre supérieur se trouve à l'adresse inférieure et est aligné sur une adresse paire.Type pointeurs
Les types Pointeur sont toujours représentés par un mot long (4 octets) et représentent l'adresse mémoire qui contient l'objet vers lequel pointe le pointeur. La constante du pointeur nil est représentée par la valeur 0.Types réels
Dans Pure Pascal, il y a un total de quatre types réels de base, à savoir single (4 octets), double (8 octets), ), real (10 octets) et extended (12 octets).Cependant, le type de données comp (SPECIFIQUE AUX INTEL SEULEMENT) dans Turbo Pascal n'est pas implémenté car il n'est pas pris en charge par le coprocesseur à virgule flottante 68881.
Le type de données single se compose en interne du signe (1 bit), de l'exposant (8 bits) et de la mantisse (23 bits).
Le type de données double se compose du signe (1 bit), de l'exposant (11 bits) et de la mantisse (52 bits).
Le type de données real se compose du signe (1 bit), de l'exposant (15 bits) et de la mantisse (64 bits).
Le type de données extended se compose du signe (1 bit), de l'exposant (15 bits), d'un mot inutilisé (16 bits) et de la mantisse (64 bits). Le mot non utilisé est une propriété matérielle du coprocesseur à virgule flottante 68881 et est utilisé par Pure Pascal afin d'atteindre la vitesse maximale du code machine généré.
Tous les types réels sont alignés sur des adresses paires par le compilateur
Type Chaîne
Une chaîne est stockée sous la forme d'une séquence de caractères individuels. La longueur actuelle de la chaîne est placée devant le contenu réel en tant qu'élément zéro de la chaîne. Par conséquent, un octet de plus que la quantité déclarée de la chaîne est requis pour le stockage.Puisque la longueur est codée dans un octet, la longueur maximale des chaînes dans Pure Pascal (et les autres langages Pascal tel Turbo Pascal) est de 255 octets.
Type Ensembles (statistiques)
Les ensembles sont représentées sous la forme d'une séquence de bits. Pour chaque élément (potentiel) d'un ensemble, il y a un bit qui vaut soit 1 si l'élément en question est contenu dans l'ensemble, soit 0 s'il n'est pas contenu. Les ensembles peuvent contenir un maximum de 256 éléments, les limites inférieure et supérieure du type d'élément étant comprises entre 0 et 255. Les quantités peuvent donc être au maximum de 32 octets (256 éléments/8 bits par octet).Pour économiser de l'espace de stockage, seuls les octets sont créés qui, après la définition du type d'élément, peuvent contenir des éléments. Par exemple, pour l'ensemble suivant
seuls quatre octets au total sont réservés. La limite inférieure du type d'élément est Ord ('A') = 65, la limite supérieure Ord ('Z') = 90. Les octets qui contiendraient les éléments 0..63 et 96..255 sont automatiquement omis.var Majuscule = set of 'A' .. 'Z';
La formule générale de l'espace requis par un ensemble est:
Afin de pouvoir accéder à l'élément avec un certain nombre E, il faut calculer le numéro d'octet et le numéro de bit dans l'octet correspondant:Bytes = (Limite_sup DIV 8) - (Limite_inf DIV 8) + 1;
Incidemment, les bits dans un octet sont numérotés de telle manière que le bit le moins significatif reçoit le numéro 0 et le bit le plus significatif est numéroté 7.NumOctet = (E DIV 8) - (Limite_inf DIV 8); NuBit = E MOD 8;
Types Fichiers
Les types de fichiers sont représentés en interne sous forme d'enregistrements. Les fichiers typés et non typés sont décrits par la définition de type suivante (disponible dans l'unité DOS):Ces types de fichiers occupent donc un total de 174 octets d'espace de stockage.type FileRec = record Handle : Word; Mode : Word; RecSize : LongInt; Private : array[1..28] of Byte; UserData : array[1..16] of Byte; Name : array[0..119] of Char; Reserved : Word; end;
Les fichiers texte contiennent également un tampon de 128 octets, soit un total de 302 octets. La déclaration est à nouveau disponible dans l'unité DOS:
Le composant handle contient le numéro de canal attribué par le système d'exploitation pour le fichier. Mode décrit le mode d'accès et peut avoir l'une des valeurs suivantes:type TextBuf = array[0..127] of Char; TextRec = record Handle : Word; Mode : Word; BufSize : LongInt; BufPos : LongInt; BufEnd : LongInt; BufPtr : ^TextBuf; OpenFunc : Pointer; InOutFunc : Pointer; FlushFunc : Pointer; CloseFunc : Pointer; UserData : array[1..16] of Byte; Name : array[0..119] of Char; Reserved : Word; Buffer : TextBuf; end;
RecSize spécifie la taille d'un enregistrement dans un fichier typé, ou la taille de bloc, qui a été spécifiée comme paramètre facultatif pour les fichiers non typés lors de l'ouverture du fichier. Les composants Private et Reserved ne doivent pas être modifiés, ils servent à des fins internes de la bibliothèque d'exécution. Les données utilisateur, en revanche, peuvent être utilisées librement. Le Name contient le nom du fichier sous lequel le fichier a été ouvert.const fmClosed = $D7B0; { Le dossier est fermé } fmInput = $D7B1; { Lecture seule autorisée } fmOutput = $D7B2; { Seule l'écriture est autorisée } fmInOut = $D7B3; { Lecture et écriture autorisées }
Avec les fichiers texte, il y a quelques champs supplémentaires qui sont utilisés pour gérer le tampon de fichier: BufSize est la taille du tampon, BufPos montre la position actuelle dans le tampon, BufEnd le nombre de caractères valides dans le tampon et BufPtr montre le début de la zone de stockage du tampon de fichiers. Normalement, BufPtr pointe vers le champ Buffer, sauf si un autre tampon de texte a été configuré (avec la procédure SetTextBuf).
Les champs OpenFunc, InOutFunc, FlushFunc et CloseFunc vous permettent d'implémenter vos propres pilotes de périphérique. Une description détaillée se trouve dans la section Pilote de périphérique texte.
Type Tableau
Les tableaux sont simplement stockés en mémoire sous la forme d'une séquence de leurs éléments. Dans le cas de réseaux multidimensionnels, l'agencement est tel que l'indice le plus en arrière varie le plus rapidement. Par exemple, pour la déclaration suivante:les articles sont rangésvar Matrix = array [1..2,1..3] of integer;
Matrix[1,1], Matrix[1,2], Matrix[1,3], Matrix[2,1], Matrix[2,2], Matrix[2,3]
en mémoire.
Les tableaux sont alignés sur des adresses paires par le compilateur si cela est nécessaire pour les éléments du tableau.
Type Enregistrement
Dans le cas des enregistrements, les champs sont rangés dans la mémoire dans l'ordre dans lequel ils sont déclarés. Le compilateur garantit que les enregistrements sont toujours alignés sur des adresses paires et que leur taille est également arrondie à un nombre pair. L'alignement des champs dépend de leur type de données.Si un enregistrement a plusieurs variantes, elles commencent toujours à la même adresse, c'est-à-dire que les variantes sont superposées dans la mémoire.
Type Objet
Les objets sont représentés d'une manière très similaire aux enregistrements. Vos champs sont enregistrés les uns après les autres dans la mémoire.Les objets avec des méthodes virtuelles ont un champ supplémentaire, à savoir un pointeur vers la table des méthodes virtuelles. Ce champ est créé par le compilateur dès que la première méthode virtuelle est déclarée.
Dans Pure Pascal, la table des méthodes virtuelles consiste en une table de mots longs. La première entrée contient la taille en octets des objets de ce type, la seconde le décalage du pointeur vers la table de méthode dans ces objets. Les mots longs restants contiennent des pointeurs vers les méthodes virtuelles de ce type d'objet.