Guía de seguimiento dinámico de Solaris

Declaraciones de matriz y almacenamiento

D proporciona compatibilidad paramatrices escalares además de las matrices asociativas dinámicas que se describen en el Capítulo 3. Las matrices escalares son un grupo de longitud fija de ubicaciones de memoria consecutivas que almacenan un valor cada una del mismo tipo. A las matrices escalares se accede haciendo referencia a cada ubicación con un entero comenzando a partir de 0. Las matrices escalares se corresponden directamente en concepto y sintaxis con las matrices en C y C++. Las matrices escalares no se utilizan con tanta frecuencia en D que las matrices asociativas y sus adiciones homólogas más avanzadas, pero a veces son necesarias al acceder a estructuras de datos de matriz de un sistema operativo existente declaradas en C. Las adiciones se describen en el Capítulo 9Adiciones.

Una matriz en D escalar de 5 enteros se declararía usando el tipo int y colocando un sufijo a la declaración con el número de elementos entre corchetes de esta forma:

int a[5];

El siguiente diagrama muestra una representación visual del almacenamiento de matriz:

Figura 5–1 Representación de matriz escalar

El diagrama muestra una imagen de una matriz de cinco objetos.

La expresión en D a[0] se utiliza para hacer referencia al primer elemento de la matriz, a[1] hace referencia al segundo, etc. Desde el punto de vista sintáctico, las matrices escalares y matrices asociativas son muy parecidas. Se puede declarar una matriz asociativa de los cinco enteros a los que se hace referencia mediante una clave de entero de esta forma:

int a[int];

y también se hace referencia a esta matriz mediante la expresión a[0]. Pero desde una perspectiva de almacenamiento e implementación, las dos matrices son muy diferentes. La matriz estática a consiste en cinco ubicaciones de memoria consecutivas numeradas desde cero, y el índice hace referencia a un desplazamiento en el almacenamiento asignado para la memoria. Una matriz asociativa, por otro lado, no tiene un tamaño predefinido y no almacena elementos en ubicaciones de memoria consecutivas. Además, las claves de matrices asociativas no tienen relación con la ubicación de almacenamiento del valor correspondiente. Se puede acceder a elementos de matrices asociativas a[0] y a[-5] y sólo se asignarán dos palabras de almacenamiento por Dtrace, que pueden ser o no consecutivas. Las claves de matrices asociativas son nombres abstractos para el valor correspondiente que no tienen relación con las ubicaciones de almacenamiento del valor.

Si crea una matriz utilizando una asignación inicial y utiliza una única expresión de enteros como el índice de matriz (por ejemplo, a[0] = 2), el compilador en D creará siempre una nueva matriz asociativa, incluso aunque en esta expresión a también se pueda interpretar como una asignación a una matriz escalar. Las matrices escalares se deben declarar con anterioridad en esta situación, de forma que el compilador de D pueda ver la definición del tamaño de la matriz y detectar que la matriz es una matriz escalar.