Manuel de suivi dynamique Solaris

Déclarations et stockage d'ensembles

Outre les tableaux associatifs dynamiques présentés dans le chapitre 3, D prend également en charge les tableaux scalaires. Les tableaux scalaires sont un groupe de longueur fixe contenant des emplacements mémoire consécutifs, chacun d'eux stockant une valeur du même type. Les ensembles scalaires sont accessibles en référençant chaque emplacement avec un entier à partir de zéro. Les ensembles scalaires correspondent au concept et à la syntaxe des ensembles dans C et C++. Les tableaux scalaires ne sont pas utilisés aussi fréquemment dans D que les tableaux associatifs et leurs groupements plus avancés, mais ils sont parfois nécessaires pour accéder aux structures de données de tableau du système d'exploitation existantes déclarées dans C. Les groupements sont décrits dans le Chapitre9Groupements.

Un ensemble scalaire D de 5 entiers pourrait être déclaré à l'aide du type int et en suffixant la déclaration par le nombre d'éléments entre crochets comme suit :

int a[5];

Le diagramme suivant illustre une représentation visuelle du stockage d'ensembles :

Figure 5–1 Représentation d'ensembles scalaires

Le diagramme illustre un ensemble de cinq objets.

L'expression D a[0] permet de référencer le premier élément de l'ensemble, a[1] le deuxième, etc. D'un point de vue syntaxique, les ensembles scalaires et associatifs sont très similaires. Vous pouvez déclarer un ensemble associatif de cinq entiers référencé par un entier comme suit :

int a[int];

et référencer également cet ensemble à l'aide de l'expression a[0]. Cependant, du point de vue stockage et mise en œuvre, les deux ensembles sont très différents. L'ensemble statique a comprend cinq emplacements mémoire consécutifs à partir de zéro et l'index fait référence à un décalage dans le stockage attribué à l'ensemble. D'autre part, un ensemble associatif ne dispose pas de taille prédéfinie et ne stocke pas d'éléments dans des emplacements mémoire consécutifs. De plus, les clés d'ensemble associatif n'ont aucune relation avec l'emplacement de stockage de valeur correspondante. Vous pouvez accéder aux éléments d'ensemble associatif a[0] et a[-5] et deux mots de stockage seulement seront attribués par DTrace, ceux-ci pouvant être consécutifs ou non. Les clés d'ensemble associatif sont des noms abstraits de la valeur correspondante sans relation avec les emplacements de stockage de valeur.

Si vous créez un ensemble à l'aide d'une affectation initiale et que utilisez une seule expression d'entier comme index d'ensemble (par exemple, a[0] = 2), le compilateur D crée toujours un ensemble associatif, même si cette expression a peut également être interprétée comme une affectation d'ensemble scalaire. Les ensembles scalaires doivent être prédéclarés dans ce cas pour que le compilateur D puisse afficher la définition de taille de l'ensemble et en déduire que l'ensemble est un ensemble scalaire.