A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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:

Apresentações semelhantes


Apresentação em tema: "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:"— Transcrição da apresentação:

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


Carregar ppt "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:"

Apresentações semelhantes


Anúncios Google