Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouVergílio Coradelli Weber Alterado mais de 9 anos atrás
1
Organização do Armazenamento EstáticaEstática –Variáveis globais; –Fortran; Dinâmica (pilha e heap)Dinâmica (pilha e heap) –Variáveis locais; –Sem aninhamento: Procedimento acessa somente variáveis locais e globaisProcedimento acessa somente variáveis locais e globais C;C; –Com aninhamento: Procedimento pode acessar variáveis não-locais;Procedimento pode acessar variáveis não-locais; Pascal;Pascal;
2
Alocação estática Endereços conhecidos em tempo de compilação, possibilitando acesso mais eficiente;Endereços conhecidos em tempo de compilação, possibilitando acesso mais eficiente; Valores “persistem” entre chamadas de procedimentos (se usada para procedimentos);Valores “persistem” entre chamadas de procedimentos (se usada para procedimentos); Compilador deve conhecer o tipo de cada variável antes da execução:Compilador deve conhecer o tipo de cada variável antes da execução: –Tipagem estática (PASCAL, JAVA, Haskell, etc.); Tamanho dos objetos tem que ser conhecido em tempo de compilação.Tamanho dos objetos tem que ser conhecido em tempo de compilação. –Retrição de “tipos de tamanho fixo”;
3
Alocação estática type Date = record type Date = record y: Integer, y: Integer, m: Integer, m: Integer, d: Integer d: Integer end; end; var a: Array 3 of Integer; var a: Array 3 of Integer; var b: Boolean; var b: Boolean; var c: Char; var c: Char; var t: Date; var t: Date; a[0] a[1] a[2] b c t.y t.m t.d Espaço não usado a t
4
Alocação estática - limitações Não suporta procedimentos recursivos;Não suporta procedimentos recursivos; Estruturas de dados não podem ser criadas dinamicamente.Estruturas de dados não podem ser criadas dinamicamente.
5
Variáveis Locais Organização do Armazenamento Pilha (Variáveis Locais) Uso da pilha permite variáveis locais;Uso da pilha permite variáveis locais; A pilha também armazena o estado do programa durante chamadas de procedimentos: valores de registradores, contador do programa, computações intermediárias etc.A pilha também armazena o estado do programa durante chamadas de procedimentos: valores de registradores, contador do programa, computações intermediárias etc.
6
Variáveis Locais Organização do Armazenamento Pilha (Variáveis Locais) let var a: array 3 of integer; var a: array 3 of integer; var b: Boolean; var b: Boolean; var c: Char; var c: Char; proc Y () ~ proc Y () ~ let let var d: Integer; var d: Integer; var e: record c:Char, n:Integer end var e: record c:Char, n:Integer end in …; in …; proc Z () ~ proc Z () ~ let let var f:Integer var f:Integer in in begin …; Y(); … end begin …; Y(); … end in in begin …; Y(); …; Z(); … end begin …; Y(); …; Z(); … end
7
Variáveis Locais Organização do Armazenamento Pilha (Variáveis Locais) tempo de vida de variáveis globais tempo de vida de variáveis locais a Y tempo de vida de variáveis locais a Z Programa inicia Programa chama Y Retorno de Y Programa chama Z Z chama YRetorno de Y Retorno de Z Programa pára
8
Acessando Varáveis Locais e Globais (Stack Frames) globals SB ST(1) Depois que o programa inicia ST = Stack Top
9
Acessando Varáveis Locais e Globais (Stack Frames) globals frame for Y SB LB ST (2) Depois que o programa chama Y LB = Local Base
10
Estrutura de um frame ligação dinâmica endereço de retorno ligação dados locais SB = Stack Base LB = Local Base ST = Stack Top
11
Acessando Varáveis Locais e Globais (Stack Frames) globals frame for Y SB LB ST (2) Depois que o programa chama Y
12
Acessando Varáveis Locais e Globais (Stack Frames) globals SB ST(3) Após retorno de Y
13
Acessando Varáveis Locais e Globais (Stack Frames) globals frame for Z SB LB ST (4) Após programa chamar Z
14
Acessando Varáveis Locais e Globais (Stack Frames) globals frame for Z frame for Y SB LB ST (5) Após Z chamar Y
15
Acessando Varáveis Locais e Globais (Stack Frames) globals frame for Z SB LB ST (6) Após retorno de Y
16
Acessando Varáveis Locais e Globais (Stack Frames) globals SB ST(7) Após retorno de Z
17
Instruções para acessar variáveis Variáveis globais:Variáveis globais: –LOAD d [SB] –STORE d [SB] Variáveis locais:Variáveis locais: –LOAD d [LB]
18
Instruções para acessar variáveis Exemplos:Exemplos: –LOAD 0 [SB] Ler variável global a[0];Ler variável global a[0]; –LOAD 4 [SB] Ler variável global c;Ler variável global c; –LOAD 2 [LB]; Para procedimento Y ler variávei local d;Para procedimento Y ler variávei local d; –LOAD 4 [LB]; Para procedimento Y ler variávei local e.n;Para procedimento Y ler variávei local e.n; –LOAD 2 [LB]; Para procedimento Z ler variávei local f;Para procedimento Z ler variávei local f;
19
Variáveis não-locais Em linguagens como PASCAL, procedimentos podem acessar variáveis não- locais:Em linguagens como PASCAL, procedimentos podem acessar variáveis não- locais: –Procedimentos aninhados; –Procedimento pode acessar uma variável que não é local a P mas é local a um procedimento que o envolve; Registradores L 1, L 2, …, L n :Registradores L 1, L 2, …, L n : –Acesso aos frames de variáveis não-locais;
20
let var g1: Integer; var g2: Array 3 of Boolean proc Q () ~ let let var q: Array 3 of Char proc R () ~ let var r: Boolean; in begin … end in begin … end; proc S () ~ let var s: Array 4 of Char; in begin … end var q: Array 3 of Char proc R () ~ let var r: Boolean; in begin … end in begin … end; proc S () ~ let var s: Array 4 of Char; in begin … end in begin … end in begin … end Variáveis Locais Organização do Armazenamento Pilha (Variáveis Locais)
21
Acessando Varáveis Não- Locais frame for P globals SB LB ST (1) Depois que o programa chama P
22
Acessando Varáveis Não- Locais frame for P globals SB L1 ST (2) Após P chamar Q frame for Q LB
23
Acessando Varáveis Não- Locais frame for P globals SB LB ST (3) Depois de retornar de Q
24
Acessando Varáveis Não- Locais frame for P globals SB L1 ST (4) Após P chamar S frame for S LB
25
Acessando Varáveis Não- Locais frame for P globals SB L1 (5) Após S chamar Q frame for S ST LB frame for Q
26
Acessando Varáveis Não- Locais frame for P globals SB L1 ST (6) Após Q chamar R frame for S LB frame for Q frame for R L2
27
Acessando Varáveis Não- Locais frame for P globals SB L1 ST (7) Após retorno de R frame for S LB frame for Q
28
Acessando Varáveis Não- Locais frame for P globals SB L1 ST (8) Após retorno de Q frame for S LB
29
Instruções para acessar variáveis Exemplos:Exemplos: –LOAD d [SB] Para procedimento R acessar uma variável globalPara procedimento R acessar uma variável global –LOAD d [LB] Para procedimento R acessar uma variável local a ele próprio;Para procedimento R acessar uma variável local a ele próprio; –LOAD d [L1]; Para procedimento R acessar uma variável local a Q;Para procedimento R acessar uma variável local a Q; –LOAD d [L2]; Para procedimento R acessar uma variável local a P;Para procedimento R acessar uma variável local a P;
30
Estrutura Estendida de um frame ligação dinâmica endereço de retorno ligação dados locais L1 = content(LB) L2 = content(content(LB)) L3 = content(content(content(LB))) ligação estática
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.