2 preguntas (Tiempos y Arrays)

Tengo dos dudas que espero que me ayuden a resolver, ya que por más que he buscado no he podido encontrar la solución:
1- ¿Cómo se "representa" un array en memoria?
2- ¿Como puedo tomar los tiempos de ejecución de un programa (tomando una variable "TiempoInicio" menos "TiempoTermino")
Me ayudarían mucho si me dan una mano con esto

1 Respuesta

Respuesta
1
En Pascal, los arrays se representan en memoria ocupando posiciones consecutivas. Vamos a suponer que tenemos un array A, que es un array [1..10] of integer, y que se encuentra alojado en la dirección de memoria @A.
Como supongo que sabrás, en Pascal, un valor Integer ocupa 2 bytes. Por tanto, un array de 10 enteros ocupará 20 bytes en memoria. Y los ocupa a partir de la dirección @A:
- En los dos bytes que encontramos en @A y @A+1 tendremos la primera componente del array, o sea, A[1].
- En los dos bytes que encontramos en @A+2 y @A+3 tendremos la segunda componente del array, o sea, A[2].
Y así hasta el final.
Hay una cosas que debemos tener en cuenta: esto es independiente del rango de índices soportado. En el momento de acceder a los datos se hace una traslación de los índices para relocalizar el array a indices [0..X]. Es decir: si tenemos un arrray B [14..95], localizado en la posición de memoria @B, el componente B[14] se encuentra en la posición de memoria @B.
Entonces: En general, supongamos que tenemos un array A [I0.. If] of tDato, que se encuentra en la posición de memoria @A. Si tDato es un tipo de dato que ocupa T bytes, la dirección de memoria en que se encuentra la componente I del array es
@A + T*(I-I0)
¿Queda claro? Bien, vamos a complicarlo un poco. Supongamos que tenemos un array bidimensional A[I0..If][J0...Jf] of tDato. El funcionamiento es el mismo, si te fijas en equ esto es un
array[I0..If] of array[J0..Jf] of tDato. Para cada array "interno", el funcionamiento es el mismo de antes, pero, ¿en qué dirección de memoria se encuentra cada array interno?
Fácil: no hay más que saber el tamaño de los datos. Si tDato es de tamaño T, entonces cada array interno es de tamaño T*(Jf-J0+1), con lo que ya sabes en qué posición de memoria comenzaría el componete i del primer array, o sea, el array interno que está en la posición i, si conocemos la dirección de memoria donde se encuentra el array principal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas