Upload
vergilio-coradelli-weber
View
217
Download
0
Embed Size (px)
Citation preview
Organização do Armazenamento
• EstáticaEstática– Variáveis Variáveis globaisglobais;;– FortranFortran;;
• Dinâmica (pilha e heap)Dinâmica (pilha e heap)– Variáveis Variáveis locaislocais;;– SemSem aninhamento: aninhamento:
• Procedimento acessa somente variáveis Procedimento acessa somente variáveis locaislocais e e globaisglobais• CC;;
– ComCom aninhamento: aninhamento: • Procedimento pode acessar variáveis Procedimento pode acessar variáveis não-locaisnão-locais;;• PascalPascal;;
Alocação estática
• Endereços conhecidos em tempo de compilação, Endereços conhecidos em tempo de compilação, possibilitando possibilitando acesso mais eficiente;acesso mais eficiente;
• Valores “persistem” entre chamadas de Valores “persistem” entre chamadas de procedimentos (se usada para procedimentos);procedimentos (se usada para procedimentos);
• Compilador deve conhecer o tipo de cada Compilador deve conhecer o tipo de cada variável antes da execução:variável antes da execução:
– Tipagem estática (PASCAL, JAVA, Haskell, etc.);Tipagem estática (PASCAL, JAVA, Haskell, etc.);• Tamanho dos objetosTamanho dos objetos tem que ser conhecido em tem que ser conhecido em
tempo de compilação.tempo de compilação.– Retrição de Retrição de “tipos de tamanho fixo”“tipos de tamanho fixo”;;
Alocação estática
type Date = recordtype Date = record yy: : IntegerInteger,, mm: : IntegerInteger,, dd: : IntegerInteger end;end; var var aa: : Array 3 of IntegerArray 3 of Integer;; var var bb: : BooleanBoolean;; var var cc: : CharChar;; var var tt: : DateDate; ;
a[0]a[0]
a[1]a[1]
a[2]a[2]
bb
cc
t.yt.y
t.mt.m
t.dt.d
Espaço não usado
a
t
Alocação estática - limitações
• Não suporta procedimentos recursivos; Não suporta procedimentos recursivos; • Estruturas de dados não podem ser Estruturas de dados não podem ser
criadas dinamicamente.criadas dinamicamente.
Organização do Armazenamento Pilha (Variáveis LocaisVariáveis Locais)
• Uso da pilha permite variáveis locais;Uso da pilha permite variáveis locais;• A pilha também armazena o A pilha também armazena o estado do estado do
programaprograma durante chamadas de durante chamadas de procedimentos: valores de registradores, procedimentos: valores de registradores, contador do programa, computações contador do programa, computações intermediárias etc.intermediárias etc.
Organização do Armazenamento Pilha (Variáveis LocaisVariáveis Locais)
let let var var aa: : array 3 of integerarray 3 of integer;; var var bb: : BooleanBoolean;; var var cc: : CharChar;; proc Y () ~proc Y () ~ letlet var var dd: : IntegerInteger;; var var ee: record : record cc::CharChar, , nn::IntegerInteger end end in …;in …; proc Z () ~proc Z () ~ letlet var var ff::IntegerInteger inin begin …; Y(); … endbegin …; Y(); … end inin begin …; Y(); …; Z(); … endbegin …; Y(); …; Z(); … end
Organização do Armazenamento Pilha (Variáveis LocaisVariáveis Locais)
tempo de vida de variáveis globais
tempo de vida de variáveis
locais a Ytempo de vida de variáveis
locais a Y
tempo de vida de variáveis locais a Z
Programainicia
Programa chama Y
Retorno de Y
Programachama Z
Z chama Y Retorno de Y
Retorno de Z
Programa pára
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
SB
ST (1) Depois que o programa inicia
ST = Stack Top
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
frameframefor Yfor Y
SB
LB
ST
(2) Depois que o programa chama Y
LB = Local Base
Estrutura de um frame
ligação dinâmicaendereço de retorno
ligação
dados locaisSB = Stack BaseLB = Local BaseST = Stack Top
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
frameframefor Yfor Y
SB
LB
ST
(2) Depois que o programa chama Y
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
SB
ST (3) Após retorno de Y
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
frameframefor Zfor Z
SB
LB
ST
(4) Após programa chamar Z
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
frame frame for Zfor Z
frame frame for Yfor Y
SB
LB
ST
(5) Após Z chamar Y
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
frameframefor Zfor Z
SB
LB
ST
(6) Após retorno de Y
Acessando Varáveis Locais e Globais (Stack Frames)
globalsglobals
SB
ST (7) Após retorno de Z
Instruções para acessar variáveis
• Variáveis Variáveis globaisglobais::– LOAD d [SB]LOAD d [SB]– STORE d [SB]STORE d [SB]
• Variáveis Variáveis locaislocais::– LOAD d [LB]LOAD d [LB]– LOAD d [LB]LOAD d [LB]
Instruções para acessar variáveis
• Exemplos:Exemplos:– LOAD 0 [LOAD 0 [SBSB]]
• Ler variável global Ler variável global a[0]a[0];;– LOAD 4 [LOAD 4 [SBSB]]
• Ler variável global Ler variável global cc;;– LOAD 2 [LOAD 2 [LBLB];];
• Para procedimento Para procedimento YY ler variávei local ler variávei local dd;;– LOAD 4 [LOAD 4 [LBLB];];
• Para procedimento Para procedimento YY ler variávei local ler variávei local e.ne.n;;– LOAD 2 [LOAD 2 [LBLB];];
• Para procedimento Para procedimento ZZ ler variávei local ler variávei local ff;;
Variáveis não-locais
• Em linguagens como PASCAL, Em linguagens como PASCAL, procedimentos podem acessar variáveis não-procedimentos podem acessar variáveis não-locais:locais:
– Procedimentos aninhados;Procedimentos aninhados;– Procedimento pode acessar uma variável que Procedimento pode acessar uma variável que não não
é localé local a P mas é local a um procedimento que o a P mas é local a um procedimento que o envolve;envolve;
• Registradores LRegistradores L11, L, L22, …, L, …, Lnn::– Acesso aos Acesso aos framesframes de variáveis não-locais; de variáveis não-locais;
letlet var g1: Integer; var g1: Integer; var g2: Array 3 of Boolean var g2: Array 3 of Boolean proc Q () ~ proc Q () ~
letlet var q: Array 3 of Charvar q: Array 3 of Char
proc R () ~ proc R () ~ let let var r: Boolean; var r: Boolean; in in begin … end begin … end in in begin … end; begin … end; proc S () ~ proc S () ~ let let var s: Array 4 of Char; var s: Array 4 of Char; in in begin … end begin … end
in begin … endin begin … end
Organização do Armazenamento Pilha (Variáveis LocaisVariáveis Locais)
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
LB
ST (1) Depois que o programa chama P
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
ST
(2) Após P chamar Qframeframe
for Qfor Q
LB
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
LB
ST (3) Depois deretornar de Q
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
ST
(4) Após P chamar Sframeframe
for Sfor S
LB
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
(5) Após S chamar Qframeframe
for Sfor S
ST
LBframeframefor Qfor Q
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
ST
(6) Após Q chamar Rframeframe
for Sfor S
LB
frameframefor Qfor Q
frameframefor Rfor R
L2
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
ST
(7) Após retorno de Rframeframe
for Sfor SLB
frameframefor Qfor Q
Acessando Varáveis Não- Locais
frameframefor Pfor P
globalsglobalsSB
L1
ST
(8) Após retornode Qframeframe
for Sfor S
LB
Instruções para acessar variáveis
• Exemplos:Exemplos:– LOAD LOAD dd [ [SBSB]]
• Para procedimento R acessar uma variável globalPara procedimento R acessar uma variável global
– LOAD LOAD dd [ [LBLB]]• 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 LOAD dd [ [L1L1];];• Para procedimento R acessar uma variável local a Q;Para procedimento R acessar uma variável local a Q;
– LOAD LOAD dd [ [L2L2];];• Para procedimento R acessar uma variável local a P;Para procedimento R acessar uma variável local a P;
Estrutura Estendida de um frame
ligação dinâmicaendereço de retorno
ligação
dados locais L1 = content(LB)L2 = content(content(LB))L3 = content(content(content(LB)))
ligação estática