Vous êtes sur la page 1sur 28

COMPILADO

RES
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

MEMRIA
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br

Gerncia de Memria
No contexto da compilao, a
gerncia de memria refere-se a
alocao de dados (variveis e
constantes) em tempo de compilao
e de execuo.

Gerncia de Memria
Na memria o programa dividido em
duas reas.
rea de Dados;
rea do Cdigo;

Caso os tipos de dados sejam previamente


conhecidos o tamanho de memria
necessria ficar disponvel no cdigo
executvel, caso contrrio, ser gerada em
tempo de execuo.

Gerncia de Memria
A memria para o programa compilado
deve conter:
O cdigo objeto gerado;
O espao para as variveis globais
(rea esttica);
A pilha de ativao de procedimentos
(variveis locais e estado da CPU);
O espao para memria dinmica
(heap);

Alocao de memria para


pilha
Usada
para
chamadas
procedimentos e funes;
Em cada chamada empilhado:

de

o registro de ativao (RA), com


condies da CPU;
rea de dados para variveis locais;
rea para parmetros;
Ponteiros de controle da pilha;

Alocao de memria para


pilha

Alocao de memria para


pilha
Exemplo:
Considere a expesso abaixo com limite
de erro tolerado:

Ex = x0 + x1 / 1! + x2/2! + x3/3! + x4/4!


+ x5/5! + ...
Nesse caso o programa expoX deve
conter dois procedimentos: somatorio
e o fatorial, sendo que o fatorial
(recursivo) chamado dentro do
somatorio (funo simples).

Alocao de memria para


pilha

Alocao de memria para


pilha

Acesso a variveis no
locais
Existem linguagens de
Escopo Esttico: As variveis e seus
tipos so conhecidos em tempo de
compilao. Exemplo: C, Pascal.
Escopo Dinmico: As variveis e seus
tipos so conhecidos em tempo de
execuo. Exemplo: Lisp, APL.

Acesso a variveis no
locais
No Escopo Esttico, pode-se permitir
ou no aninhamento de rotinas.
Rotinas no aninhadas: Os endereos
das variveis e das rotinas so
conhecidos o que permite que rotinas
sejam passadas por parmetros.
Exemplo: Fortram

Acesso a variveis no
locais
No Escopo Esttico, pode-se permitir
ou no aninhamento de rotinas.
Rotinas aninhadas: Os endereos das
variveis so conhecidos. Os endereos
das rotinas vo depender do nvel de
embutimento da rotina.
Exemplo: Pascal

Acesso a variveis no
locais
O mecanismo de busca de variveis
no-locais pode ser implementado de
dois modos:
Ponteiros de Acesso
Ponteiros de Nveis

Ponteiros de Acesso
Para acessar os nomes no-locais,
cada registro de ativao tem um
ponteiro de acesso que indica o
registro de ativao da rotina
imediatamente envolvente (de nvel
de
embutimento
uma
unidade
menor), independente da ordem de
ativao.

Ponteiros de Acesso

Ponteiros de Nveis
Utiliza um vetor de ponteiros para
registros de ativao.
A rea de memria reservada para
uma varivel no local A, declarada
no nvel de embutimento i, estar
localizada no registro de ativao
apontado pelo elemento V[i] do vetor
de ponteiros.

Ponteiros de Nveis
Cada procedimento enxerga o vetor correto
desde o nvel 1 at seu prprio nvel.
O tamanho do vetor dado pelo nvel
mximo de embutimento de procedimentos
no programa, em tempo de compilao.
O vetor de nveis armazenado em uma
rea de memria reservada ou na prpria
pilha de ativao.

Ponteiros de Nveis

Passagem de Parmetros
A comunicao de dados feita
atravs de variveis globais ou de
parmetros.
A passagem de parmetros pode ser
feita:
Por
Por
Por
Por

valor
referncia
cpia Restaurao
nome

Passagem de Parmetros
Por valor: criada uma varivel
temporria local e o valor do parmetro
atribudo a essa varivel. As alteraes
feitas no parmetro no interferem fora da
rotina;
Por referncia: o endereo da varivel
associado a varivel local temporria. As
alteraes feitas no parmetro interferem
fora da rotina;

Passagem de Parmetros
Por
cpia-restaurao:
neste
caso
os
argumentos que correspondem a valores so
passados por valor e as variveis so
passadas por referncia.
Por nome: Este tipo pouco encontrado nas
linguagens (Algol) e seu interesse mais
terico. Nele, a chamada de um procedimento
substituda pelo corpo do procedimento. Os
parmetros no procedimento so substitudos
pelo parmetro real da chamada.

Alocao Dinmica de
Memria
Essa alocao feita em tempo de
execuo e os dados vo para a rea
chamada de Heap. Esse tipo de
alocao pode ser:
Explcita:
atravs
de
comandos
especficos, como o NEW do Pascal.
Nestes casos o programador deve se
preocupar com a desalocao dos dados
que no sero mais teis a fim de evitar
o estouro de pilha.

Alocao Dinmica de
Memria
Essa alocao feita em tempo de
execuo e os dados vo para a rea
chamada de Heap. Esse tipo de
alocao pode ser:
Implcita: resultante de operaes de
construo de estruturas complexas,
como o comando CONS do Lisp. Nestes
casos as rotinas de suporte execuo
j
possuem
maneiras
de
retirar
automaticamente dados que no sero
mais utilizados pelo programa.

Clculo da Memria Exigida


Para calcular o quanto de memria
um programa vai precisar em sua
rea de dados necessrio algumas
informaes.
Na rea de cdigo, vai depender da
forma de gerenciamento do sistema
operacional.

Clculo da Memria Exigida


Em alocao esttica, basta verificar o
tamanho de cada tipo de varivel declarada
(global e local) e analisar seu tamanho.
Em pascal, por exemplo, integer tem 2
bytes e real tem 6 bytes. Ento
x , y: Integer; x1, y1: real;
vai precisar de 16 bytes de memria.

Clculo da Memria Exigida


Na memria dinmica no h como
resolver esse clculo em tempo de
compilao, por isso utilizado o
Heap que tem um limite livre para
esse tipo de dado.

DVIDAS

Vous aimerez peut-être aussi