Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Lenguajes de Programación Implementación de arreglos Ma. Laura Cobo Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación 2016 Prof. Ma. Laura Cobo Página 1 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semiestática Program Principal Procedure Q var i:integer a:array[1..10] of real begin a[i]:= 1; end Q Al trabajar con arreglos, como mencionamos previamente, se mantiene un descriptor para los objetos de datos vinculados a esté tipo, que mantiene en forma básica: - Límite inferior - Límite superior End Principal 2 Prof. Ma. Laura Cobo Página 2 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semiestática Program Principal Registro del esquema de alocación Pila Procedure Q var i:integer a:array[1..10 ]of real begin a[i]:= 1; end Q End Principal 0 ACTUAL 1 2 3 4 límite inf. 5 límite sup. DESCRIPTOR 6 7 … 15 Prof. Ma. Laura Cobo 3 Página 3 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Estruct. bloques anidados - Alocación semiestática Program Principal Registro de activación de Q Pila Procedure Q var i:integer a:array[1..10] of real begin a[i]:= 1; end Q 0 1 2 3 i 4 1 (límite inf.) 5 10 (límite sup.) End Principal 6 Resolución del acceso a a[5] 7 ACTUAL+4+2(5-PILA[ACTUAL+4])+S α + D + (5-LI) + S … 15 Prof. Ma. Laura Cobo a 4 Página 4 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semiestática Program Principal Registro de activación de Q Procedure Q var i:integer a:array[1..10] of real begin a[i]:= 1; end Q End Principal Resolución del acceso a a[i] ACTUAL+4+2+ α + D + (i-LI) + S (PILA[ACTUAL+3]-PILA[ACTUAL+4])*S Prof. Ma. Laura Cobo Pila 0 1 2 3 i 4 1 (límite inf.) 5 10 (límite sup.) 6 7 a … 15 5 Página 5 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semiestática Registro de activación de Q Resolución del acceso a a[i] ACTUAL+4+2+ (PILA[ACTUAL+3]-PILA[ACTUAL+4])*S En realidad lo correcto es traducirlo de esta manera IF I<1 OR i>10 THEN ERROR ELSE ACTUAL+4+2+ (PILA[ACTUAL+3]-PILA[ACTUAL+4])*S Pila 0 1 2 3 i 4 1 (límite inf.) 5 10 (límite sup.) 6 7 … 15 Prof. Ma. Laura Cobo a 6 Página 6 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semiestática Resolución de la asignación a[i]:=1 Registro de activación de Q IF PILA[Actual+3]<PILA[Actual+4] OR PILA[Actual+3]>PILA[Actual+5] THEN ERROR ELSE PILA[Actual+4+2+ (PILA[Actual+3]-PILA[Actual+4])*S]:=1 JUMP PILA[Actual+3]<PILA[Actual+4] OR PILA[Actual+3]>PILA[Actual+5], ERR SET ACTUAL+4+2+(PILA[Actual+3]PILA[Actual+4]), 1 Prof. Ma. Laura Cobo Pila 0 1 2 3 i 4 1 (límite inf.) 5 10 (límite sup.) 6 7 a … 15 7 Página 7 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático - Alocación semi-dinámica - Estructuras de datos de tamaño conocido al momento de activarse la unidad. El tamaño del registro de activación no se conoce estáticamente, pero si en el momento de la creación del mismo. Se mantiene una estructura de pila para la memoria. El acceso a las variables semi-dinámicas, requiere un nivel de indirección. 8 Prof. Ma. Laura Cobo Página 8 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático - Alocación semi-dinámica Al Program Principal Procedure Q(n,m:integer) var i:integer a: array[1..n] of real; trabajar con arreglos semidinámicos, el tamaño del arreglo se conoce recién en ejecución, por lo que nuestro registro de activación se va a dividir en tres partes: b: array[1..m] of real begin a[i]:= 1; end Q End Principal Registro de activación Objetos de datos del sistema Objetos de datos locales estáticos Objetos de datos locales semidinámicos 9 Prof. Ma. Laura Cobo Página 9 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semi-dinámica Program Principal Procedure Q(n,m:integer) var i:integer Registro del esquema de alocación Pila Puntero de retorno Enlace dinámico a: array[1..n] of real; Enlace estático b: array[1..m] of real Objetos de datos locales estáticos begin a[i]:= 1; end Q End Principal Descriptores de objetos de datos semi-dinámicos Objetos de datos semi-dinámicos 10 Prof. Ma. Laura Cobo Página 10 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semi-dinámica var i:integer a: array[1..n] of real; b: array[1..m] of real begin a[i]:= 1; end Q i LI = 1 LS = n de a Procedure Q(n,m:integer) Ptero. al comienzo de a LI = 1 LS = m Ptero. al comienzo de b Descriptor de b Program Principal Objetos de datos del sistema a End Principal b 11 Prof. Ma. Laura Cobo Página 11 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación semi-dinámica Resolución de la asignación a[i]:=1 0 1 Objetos de datos del sistema 2 JUMP PILA[Actual+3]<PILA[Actual+4] OR PILA[Actual+3]>PILA[Actual+5], ERR SET PILA[Actual+4+2]+(PILA[Actual+3]PILA[Actual+4]),1 3 i 4 LI = 1 5 LS = n 6 Ptero. al comienzo de a …. Descriptor b 10 11 12 13 12 Prof. Ma. Laura Cobo Página 12 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación dinámica - Estructuras de datos de tamaño variable. Se mantiene la estructura de pila y se agrega un HEAP. Program Principal Procedure Q var i:integer a: array[1..n] of real; b: array[1..m] of real Al trabajar con arreglos dinámicos, el tamaño del arreglo no queda determinado en forma fija, ni siquiera en ejecución. begin a[i]:= 1; end Q End Principal Prof. Ma. Laura Cobo 13 Página 13 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación dinámica Program Principal Procedure Q var i:integer Registro del esquema de alocación Pila Puntero de retorno Enlace dinámico a: array[1..n] of real; Enlace estático b: array[1..m] of real Objetos de datos locales estáticos begin a[i]:= 1; end Q Heap Descriptores de objetos de datos dinámicos End Principal 14 Prof. Ma. Laura Cobo Página 14 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación dinámica - El acceso a los objetos de dato dinámicos se realiza con un nivel - - de indirección. Con la dirección del registro de activación y el desplazamiento del arreglo, se obtiene la dirección efectiva del arreglo, es decir la dirección del descriptor. Desplazándose en el descriptor se obtiene la dirección en el heap. Con la dirección en el heap y el subíndice se calcula el desplazamiento de la componente referenciada. 15 Prof. Ma. Laura Cobo Página 15 Lenguajes de Programación Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre de 2016 Implementación de arreglos Alcance estático – Alocación dinámica Program Principal Registro del esquema de alocación Pila Procedure Q 0 Puntero de retorno var i:integer Enlace dinámico a: array[1..n] of real; 2 Enlace estático b: array[1..m] of real 3 i 4 LI = 1 5 LS = n 6 Ptero. al heap a[i]:= 1; end Q descrip. de a 1 begin Heap End Principal 16 Prof. Ma. Laura Cobo Página 16