2 Alocao Dinmica
17/02/2014
Tpicos
Alocao dinmica
Vetores locais e funes
17/02/2014
Alocao Dinmica
Uso da memria:
uso de variveis globais (e estticas):
espao reservado para uma varivel global existe
enquanto o programa estiver sendo executado
17/02/2014
Alocao Dinmica
Uso da memria:
alocao dinmica:
espao de memria requisitado em tempo de execuo
espao permanece reservado at que seja explicitamente liberado
depois de liberado, espao estar disponibilizado para outros usos e
no pode mais ser acessado
espao alocado e no liberado explicitamente,
ser automaticamente liberado ao final da execuo
17/02/2014
Alocao Dinmica
memria esttica:
cdigo do programa
variveis globais
memria
esttica
Uso da memria:
Variveis globais e
Variveis estticas
Variveis alocadas
variveis estticas
memria dinmica:
memria
dinmica
dinamicamente
variveis alocadas
dinamicamente
memria livre
Cdigo do programa
variveis locais
Memria livre
Variveis locais
(Pilha de execuo)
17/02/2014
Alocao Dinmica
Uso da memria:
alocao dinmica de memria:
usa a memria livre
memria
esttica
Variveis globais e
Variveis estticas
Variveis alocadas
dinamicamente
memria
dinmica
pilha de execuo:
17/02/2014
Cdigo do programa
Memria livre
Variveis locais
(Pilha de execuo)
Alocao Dinmica
Funes da biblioteca padro stdlib.h
contm uma srie de funes pr-definidas:
funes para tratar alocao dinmica de memria
constantes pr-definidas
....
17/02/2014
Alocao Dinmica
void * malloc(int num_bytes);
17/02/2014
Alocao Dinmica
Funo malloc:
recebe como parmetro o nmero de bytes que se deseja alocar
retorna um ponteiro genrico para o endereo inicial da rea de
memria alocada, se houver espao livre:
ponteiro genrico representado por void*
ponteiro convertido automaticamente para o tipo apropriado
ponteiro pode ser convertido explicitamente
Funo sizeof:
retorna o nmero de bytes ocupado por um tipo
Funo free:
recebe como parmetro o ponteiro da memria a ser liberada
a funo free deve receber um endereo de memria que tenha sido
alocado dinamicamente
17/02/2014
Alocao Dinmica
Exemplo:
alocao dinmica de um vetor de inteiros com 10 elementos
malloc retorna o endereo da rea alocada para
armazenar valores inteiros
ponteiro de inteiro recebe endereo inicial do espao alocado
int *v;
v = (int *) malloc(10*sizeof(int));
17/02/2014
10
Alocao Dinmica
Exemplo (cont.):
v = (int *) malloc(10*sizeof(int));
1 - Declarao: int *v
Abre-se espao na pilha para
o ponteiro (varivel local)
Cdigo do
Programa
Cdigo do
Programa
Variveis
Globais e Estticas
Variveis
Globais e Estticas
40 bytes
Livre
v
17/02/2014
504
Livre
v
(c) Dept. Informtica - PUC-Rio
504
11
Alocao Dinmica
Exemplo (cont.):
v armazena endereo inicial de uma rea contnua de memria
suficiente para armazenar 10 valores inteiros
v pode ser tratado como um vetor declarado estaticamente
v aponta para o inicio da rea alocada
v[0] acessa o espao para o primeiro elemento
17/02/2014
12
Alocao Dinmica
Exemplo (cont.):
tratamento de erro aps chamada a malloc
imprime mensagem de erro
aborta o programa (com a funo exit)
v = (int*) malloc(10*sizeof(int));
if (v==NULL)
{
printf("Memoria insuficiente.\n");
exit(1); /* aborta o programa e retorna 1 para o sist. operacional */
}
17/02/2014
free(v);
13
#include <stdlib.h>
printf ( "Media = %f
free(v);
return 0;
} 17/02/2014
Variancia = %f
14
Exemplo:
produto vetorial de dois vetores u e v em 3D,
representados pelas trs componentes x, y, e z
u v u y vz v y u z , u z vx vz u x , u x v y vx u y
17/02/2014
15
16
17
18
Resumo
Funes para gerncia de memria:
17/02/2014
sizeof
malloc
free
19
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel,
Introduo a Estruturas de Dados, Editora Campus
(2004)
Captulo 5 Vetores e alocao dinmica
17/02/2014
20