En informatique , un descripteur de données est une structure contenant des informations qui décrivent des données.
Les descripteurs de données peuvent être utilisés dans les compilateurs , comme structure logicielle au moment de l'exécution dans des langages comme Ada ou PL/I , ou comme structure matérielle dans certains ordinateurs tels que les grands systèmes Burroughs avec leurs descripteurs .
Les descripteurs de données sont généralement utilisés au moment de l'exécution pour transmettre des informations d'argument aux sous-routines appelées . OpenVMS et Multics disposent de normes indépendantes du langage à l'échelle du système pour les descripteurs d'argument. Les descripteurs sont également utilisés pour contenir des informations sur des données qui ne sont entièrement connues qu'au moment de l'exécution, comme un tableau alloué dynamiquement .
Exemples
Le descripteur suivant est utilisé par IBM Enterprise PL/I pour décrire une chaîne de caractères :
- 'desc type' est 2 pour indiquer qu'il s'agit d'un descripteur d'élément plutôt que d'un descripteur de tableau ou de structure.
- « type de chaîne » indique qu'il s'agit d'une chaîne de caractères ou de bits, de longueur variable ou non. 2 indique une chaîne de caractères non variable (de longueur fixe).
- '(res)' est un octet réservé non utilisé pour les chaînes de caractères.
- Les « drapeaux » indiquent l'encodage de la chaîne, EBCDIC ou ASCII , et l'encodage de la longueur des différentes chaînes.
- « La longueur maximale de la chaîne » correspond à la longueur réelle de la chaîne pour les chaînes non variables, ou à la longueur maximale pour les chaînes variables.
Voici la source d'un descripteur de tableau de Multics. Les définitions incluent une structure pour les informations de tableau de base et une structure pour chaque dimension. (Multics fonctionnait sur des systèmes avec des mots de 36 bits).
dcl 1 tableau basé sur l'alignement, 2 node_type bit(9) non aligné, 2 bits réservés (34) non alignés, 2 nombre_de_dimensions fixe(7) non aligné, 2 own_number_of_dimensions fixed(7) non aligné, 2 element_boundary fixed(3) non aligné, 2 size_units fixed(3) non aligné, 2 offset_units fixes (3) non alignés, 2 bits entrelacés (1) non alignés, 2 c_element_size fixe(24), 2 c_element_size_bits fixes (24), 2 c_virtual_origin corrigé(24), 2 élément_taille ptr non aligné, 2 element_size_bits ptr non aligné, 2 ptr virtual_origin non alignés, 2 symtab_virtual_origin ptr non aligné, 2 symtab_element_size ptr non aligné, 2 limites ptr non alignées, 2 élément_descripteur ptr non aligné ; dcl 1 lié basé sur aligné, 2 bits de type de nœud (9), 2 c_lower fixe(24), 2 c_upper fixe(24), 2 c_multiplier fixe(24), 2 c_desc_multiplier fixe(24), 2 ptr inférieurs non alignés, 2 ptr supérieurs non alignés, 2 multiplicateur ptr non aligné, 2 desc_multiplier ptr non aligné, 2 symtab_lower ptr non aligné, 2 symtab_upper ptr non aligné, 2 symtab_multiplier ptr non aligné, 2 ptr suivants non alignés ;