Buscar

Alocação Dinâmica de Memória

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
aelm@unicap.br
Estruturas de Dados I
Alocação Dinâmica de Memória
aelm@unicap.br
Gerenciamento de Memória
• Alocação
– Processo de reserva de uma ou mais células
de memória para uma variável de programa;
• Desalocação
– Processo de devolução das células de 
memória de uma variável ao pool células de 
memória disponíveis;
aelm@unicap.br
� O tempo de vida de uma variável é o 
tempo durante o qual ela permanece
vinculada a uma localização de 
memória específica;
� O tempo de vida de um variável é o 
intervalo de tempo decorrente entre a 
sua alocação (“criação”) e a sua 
desalocação (“destruição”).
Gerenciamento de Memória
aelm@unicap.br
� Classificação das Variáveis
� Variáveis Globais
� Variáveis Locais
� Variáveis Dinâmicas (Heap)
Gerenciamento de Memória
aelm@unicap.br
• Variáveis Globais
– São alocadas AUTOMATICAMENTE no início 
da execução do programa;
– São desalocadas AUTOMATICAMENTE no 
final da execução do programa.
Gerenciamento de Memória
aelm@unicap.br
• Variáveis Locais
– São alocadas AUTOMATICAMENTE no início 
da execução do sub-programa no qual foram 
declaradas;
– São desalocadas AUTOMATICAMENTE no 
final da execução do sub-programa no qual 
foram declaradas.
Gerenciamento de Memória
2
aelm@unicap.br
• Variáveis Dinâmicas (Heap)
� Uma variável heap é uma variável dinâmica
que pode ser alocada e desalocada PELO 
PROGRAMADOR a qualquer momento 
durante a execução do programa.
� Uma variável heap é uma variável anônima, 
ou seja, sem nome, e por isso só pode ser 
acessada através de seu endereço.
Gerenciamento de Memória
aelm@unicap.br
� A criação (alocação) de uma variável heap é feita 
através de uma função chamada alocadora.
Esta função retorna o endereço da variável heap
alocada.
� Função alocadora: malloc
Sintaxe: 
void * malloc qtdBytes;
Semântica: 
A função malloc retorna o endereço do bloco de 
memória de tamanho qtdBytes alocado.
Gerenciamento de Memória
aelm@unicap.br
� Exemplo: 
int * ptr1; 
float * ptr2; 
ptr1 = (int *) malloc(sizeof(int)); 
ptr2 = (float *) malloc(sizeof(float));
OBSERVAÇÃO:
Como malloc retorna ponteiro para void, é
necessário fazer a conversão para o tipo de 
ponteiro correspondente ao dado que será
armazenado na heap.
Gerenciamento de Memória
aelm@unicap.br
� Exemplo: 
(i) int * ptr; 
(ii) ptr = (int *) malloc(sizeof(int)); 
(iii) *ptr = 10;
Gerenciamento de Memória
ptr
ptr
Variável do tipo int, anônima,
alocada dinamicamente (HEAP).
10
ptr
Variável do tipo int, anônima,
alocada dinamicamente (HEAP).
aelm@unicap.br
� Exemplo: 
(i) struct pessoa {
char nome [50];
int idade;
float peso, altura;
}
(ii) struct pessoa * ptr; 
(iii) ptr = (struct pessoa *) malloc(sizeof(struct pessoa)); 
Gerenciamento de Memória
ptr
ptr Variável do tipo struct pessoa, 
anônima,alocada dinami-
camente (HEAP).
nome
idade
peso
altura
aelm@unicap.br
� Exemplo(cont): 
(iii) ptr = (struct pessoa *) malloc(sizeof(struct pessoa));
(v)ptr->peso = 54.6;
Gerenciamento de Memória
ptr Variável do tipo struct pessoa, 
anônima,alocada dinamicamente
(HEAP).
nome
idade
peso
altura
ptr Variável do tipo struct pessoa, 
anônima,alocada dinamicamente 
(HEAP).
nome
idade
54.6peso
altura
3
aelm@unicap.br
� Exemplo: 
(i) int * ptr; 
(ii) ptr = (int *) malloc(100 * sizeof(int)); 
(iii) *(ptr + 1) = 5
Gerenciamento de Memória
ptr
ptr
Variável do tipo vetor de inteiros, 
anônima,alocada dinamicamente 
(HEAP).
0 1 ... 98 99
ptr
5
0 1 ... 98 99
Variável do tipo vetor de inteiros, 
anônima,alocada dinamicamente 
(HEAP).
aelm@unicap.br
� A destruição (desalocação) de uma variável 
heap é feita através de uma função chamada 
desalocadora.
� Função desalocadora: função free
Sintaxe: 
free (ponteiro);
Semântica:
A função free devolve a memória apontada 
pelo ponteiro de volta para o heap. Isso torna 
a memória disponível para alocação.
Gerenciamento de Memória
aelm@unicap.br
� Exemplo: 
free ptr;
IMPORTANTE: 
(i) A função free não desaloca (destrói) o ponteiro. 
Ela destrói apenas a variável heap cujo 
endereço estava armazenado no ponteiro;
(ii) A função free também não “limpa” o ponteiro, o 
mesmo permanece com o endereço da variável 
que foi desalocada.
Gerenciamento de Memória
ptr
aelm@unicap.br
� Observação:
� Uma variável heap permanece 
acessível enquanto houver uma 
variável do tipo ponteiro que armazene 
seu endereço.
Gerenciamento de Memória
aelm@unicap.br
� Problemas com Variáveis Heap
� Variável Heap Perdida
� Uma variável heap perdida é uma variável heap
alocada mas não mais acessível ao programa. 
Também chamada de lixo de memória.
� A geração de lixo de memória é conhecida como 
vazamento de memória.
int * ptr;
int i;
…
for (i = 1; i <= 10 i++) { 
ptr =(int*)malloc(sizeof(int)); //cria lixo de memória
*ptr1 = i; 
}
…
Gerenciamento de Memória
aelm@unicap.br
� Problemas com Variáveis Heap
� Referência Perdida
� Uma referência perdida é uma referência a uma 
variável heap que foi desalocada.
� Exemplo:
int *ptr;
...
ptr = (int *) malloc (sizeof(int));
...
free ptr;
...
printf(“%i”,*ptr); � Referência perdida
...
Gerenciamento de Memória
4
aelm@unicap.br
� Problemas com Variáveis Heap
� Referência Perdida – Exemplo 2:
float *ptr1, *ptr2;
…
ptr1 = (float *) malloc(sizeof(float));
…
ptr2 = ptr1; 
…
free ptr1;
…
*ptr2 = 1.6; � Referência Perdida
…
Gerenciamento de Memória

Outros materiais