Clase18 - Departamento de Ciencias e Ingeniería de la

Anuncio
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
Descargar