30
Organização do Armazenamento Estática Estática Variáveis Variáveis globais globais ; ; Fortran Fortran ; ; Dinâmica (pilha e heap) Dinâmica (pilha e heap) Variáveis Variáveis locais locais ; ; Sem Sem aninhamento: aninhamento: Procedimento acessa somente variáveis Procedimento acessa somente variáveis locais locais e e globais globais C C; Com Com aninhamento: aninhamento: Procedimento pode acessar variáveis Procedimento pode acessar variáveis não- não- locais locais ; Pascal Pascal;

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:

Embed Size (px)

Citation preview

Page 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:

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;;

Page 2: 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:

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”;;

Page 3: 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:

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

Page 4: 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:

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.

Page 5: 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:

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.

Page 6: 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:

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

Page 7: 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:

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

Page 8: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

SB

ST (1) Depois que o programa inicia

ST = Stack Top

Page 9: 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:

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

Page 10: 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:

Estrutura de um frame

ligação dinâmicaendereço de retorno

ligação

dados locaisSB = Stack BaseLB = Local BaseST = Stack Top

Page 11: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

frameframefor Yfor Y

SB

LB

ST

(2) Depois que o programa chama Y

Page 12: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

SB

ST (3) Após retorno de Y

Page 13: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

frameframefor Zfor Z

SB

LB

ST

(4) Após programa chamar Z

Page 14: 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:

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

Page 15: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

frameframefor Zfor Z

SB

LB

ST

(6) Após retorno de Y

Page 16: 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:

Acessando Varáveis Locais e Globais (Stack Frames)

globalsglobals

SB

ST (7) Após retorno de Z

Page 17: 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:

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]

Page 18: 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:

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;;

Page 19: 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:

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;

Page 20: 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:

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)

Page 21: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

LB

ST (1) Depois que o programa chama P

Page 22: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

L1

ST

(2) Após P chamar Qframeframe

for Qfor Q

LB

Page 23: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

LB

ST (3) Depois deretornar de Q

Page 24: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

L1

ST

(4) Após P chamar Sframeframe

for Sfor S

LB

Page 25: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

L1

(5) Após S chamar Qframeframe

for Sfor S

ST

LBframeframefor Qfor Q

Page 26: 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:

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

Page 27: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

L1

ST

(7) Após retorno de Rframeframe

for Sfor SLB

frameframefor Qfor Q

Page 28: 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:

Acessando Varáveis Não- Locais

frameframefor Pfor P

globalsglobalsSB

L1

ST

(8) Após retornode Qframeframe

for Sfor S

LB

Page 29: 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:

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;

Page 30: 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:

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