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
1
Anónimo
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.