Escolar Documentos
Profissional Documentos
Cultura Documentos
Reviso
Estudamos, na Introduo, que programas de computador implementam algoritmos, os
quais manipulam um conjunto de dados para produzir um resultado. O algoritmo formado
por uma seqncia de instrues que so executadas na ordem especificada, salvo por
instrues de desvio. Para executar cada instruo, exceto instrues de desvio, o algoritmo
consulta dados armazenados na memria, realiza algum processamento sobre alguns dados
e, por fim, armazena novamente o resultado na memria. No caso de instrues de desvio,
o algoritmo consulta dados armazenados na memria e determina qual deve ser a nova
instruo a executar.
Este funcionamento dos programas motiva o estudo da memria do computador, na qual
realizado o armazenamento dos dados manipulados pelo algoritmo.
Conceitos
A memria pode ser entendida como uma seqncia de clulas nas quais se pode armazenar
um valor correspondente a um dado. Para fins didticos, consideramos memrias com um
nmero ilimitado de clulas. Na prtica, os computadores atuais costumam apresentar
algumas centenas de milhes de clulas, ou mesmo bilhes de clulas.
Como as clulas esto organizadas seqencialmente, atribui-se elas um nmero
correspondente a sua posio na seqncia, contando a partir do zero. Este nmero
denomina-se endereo da clula. A manipulao dos endereos de memria ser estudada
mais para o final do curso.
Cada clula de memria caracterizada pelo seu endereo e seu
contedo.
Uma clula de memria armazena um nico valor (contedo), que representado por uma
seqncia de bits. Um bit nada mais que um dos valores 0 ou 1. A uma seqncia de 8
bits d-se o nome de byte. Usualmente, cada clula da memria formada por um byte, ou
8 bits. Significa dizer que um byte a menor quantidade de bits que podem ser endereados
individualmente na memria do computador. Assim, um computador com M posies de
memria vai dispor de M clulas, de 8 bits cada uma, onde poder armazenar valores de
dados. Numa nica operao de leitura ou escrita, o computador poder enderear cada
uma dessas M clulas individualmente, mas no poder enderear, ou acessar, apenas
partes de uma delas em operaes de leitura e escrita.
Um byte pode representar um nmero, um caractere (letra), ou outro objeto, como veremos
oportunamente. Eventualmente, quando for necessrio armazenar um valor relativamente
grande, por exemplo, um nmero com muitos dgitos, poder surgir a necessidade de se
utilizar mais de uma clula consecutiva da memria para armazenar o dado.
O armazenamento nas clulas voltil (no permanente). Se ocorrer alguma falha no
computador ou cessar a alimentao eltrica, o seu contedo perdido.
Exemplo
Vamos relembrar o algoritmo de Euclides 1) Leia um nmero e escreva na clula 1
que calcula o MDC (mximo divisor 2) Leia um nmero e escreva na clula 2
comum), apresentado na Introduo. Veja 3) Divida o valor da clula 1 pelo valor da
ao lado. No incio, temos dois nmeros, clula 2. Guarde o quociente na clula
que so dados como entrada para o 3 e o resto na clula 4.
algoritmo. Portanto, estes dois nmeros 4) Se o valor da clula 4 for 0 (zero),
devem ser armazenados cada um em uma ento mostre o valor da clula 2 e
clula de memria. Assumiremos que o PARE.
primeiro nmero ser armazenado na 5) Escreva na clula 1 o valor da clula 2.
clula de endereo 1 e o segundo nmero 6) Escreva na clula 2 o valor da clula 4.
7) Retorne ao passo 3.
Algoritmo 1 - MDC usando endereos de clulas
16/3/2010 08:34 Copyright@2005-2009 Arnaldo V. Moura, Daniel F. Ferber
de memria 2
na clula de endereo 2. A Figura 1 mostra como os valores so armazenados nas clulas de
memria.
No terceiro passo, calculamos o quociente e o resto da diviso do primeiro nmero, i.e., do
valor armazenado no endereo 1, pelo segundo numero, i.e., pelo valor armazenado no
endereo 2. Como no desejamos perder o valor destes dois
Memria: nmeros, precisamos escrever o quociente e o resto obtidos em
novas clulas de memria. No exemplo, guardamos o quociente e
7
o resto, respectivamente, nas clulas de endereo 3 e 4.
6
5
Finalmente, antes do algoritmo continuar a execuo, note que a
prxima operao de diviso espera que os nmeros estejam nas
4 Resto
clulas de endereo 1 e 2. Por este motivo, precisamos copiar,
3 Quociente
respectivamente, o quociente (que est na clula de endereo 3)
2 Nmero 2
para a clula de endereo 1 e o resto (que est na clula de
1 Nmero 1
endereo 4) para a clula de endereo 2.
0
Desafio: possvel reescrever este algoritmo de forma a utilizar
Figura 1 - Contedo menos clulas de memria durante o processamento? Quais
das clulas de memria seriam as vantagens e desvantagens de reduzir o nmero de
clulas utilizadas por um algoritmo?
Variveis
A varivel uma abstrao da noo de clula de memria.
Imagine agora que o programador, ao invs de utilizar os endereos fsicos da memria
para identificar as clulas que usa, tenha sua disposio rtulos smblicos com nomes
intuitivos. Ao invs de utilizar o endereo (posio da clula na memria), o valor em
questo identificado atravs desse rtulo (ou nome) simblico, escolhido com auxlio do
bom senso do programador. Sempre que for necessrio referir-se a algum dado, o
programador utiliza o rtulo associado varivel correspondente.
O compilador fica responsvel por criar, automaticamente, uma tabela cuja coluna 1
contm todos os rtulos usados no programa. Alm disso, nas demais colunas, o
compilador indica em que posies do programa cada rtulo usado. Esta tabela permite
com que o computador --- mais precisamente, o sistema operacional que controla o
computador --- logo antes de executar o programa escolha livremente quais clulas fsicas
da memria esto livres e podem, portanto, ser associadas a cada um dos nomes simblicos
que esto na coluna 1 da tabela. Uma clula est livre se no foi bloqueada para uso de
nenhum outro programa, nesse instante. Tendo associado clulas livres a cada rtulo usado
pelo programa, e bloqueado estas clulas, o computador simplesmente percorre as demais
colunas da tabela e substitui os rtulos simblicos usados pelo programador por esses
endereos fsicos de memria. claro que essas clulas escolhias devem ser bloqueadas
para uso apenas do nosso programa por todo o temo que perdure sua execuo. Quando
nosso programa terminar, as clulas associadas aos nomes simblicos que usou so
liberadas pelo computador, e ficam livres para serem utilizadas por outros programas.
Todo esse trabalho de associao e bloqueio de clulas de memria logo antes da execuo
do programa, e desbloqueio ao seu trmino, feito automaticamente e deforma transparente
pelo compilador em conjunto com o sistema operacional (num processo conhecido como
carga do programa). O programador fica completamente livre desses detalhes, pois usa
apenas os rtulos simblicos ao escrever seu cdigo na linguagem de programao.
Uma clula de memria, quando identificada por um rtulo, ser denominada uma
varivel. Ao invs de pensar na memria como uma seqncia longa de clulas, o podemos
entender a memria como um repositrio que contm o conjunto das variveis associadas
ao nosso programa.
Exemplo
Vamos rever o algoritmo de Euclides que calcula o MDC (mximo divisor comum),
apresentado na Introduo, desta vez utilizando variveis. Ele comea lendo dois nmeros,