Vous êtes sur la page 1sur 4

Gerenciamento de Memria

Estruturas de Dados I

Alocao
Processo de reserva de uma ou mais clulas
de memria para uma varivel de programa;

Desalocao
Alocao Dinmica de Memria

aelm@unicap.br

Gerenciamento de Memria
 O tempo de vida de uma varivel o
tempo durante o qual ela permanece
vinculada a uma localizao de
memria especfica;
 O tempo de vida de um varivel o
intervalo de tempo decorrente entre a
sua alocao (criao) e a sua
desalocao (destruio).

Processo de devoluo das clulas de


memria de uma varivel ao pool clulas de
memria disponveis;

aelm@unicap.br

Gerenciamento de Memria
 Classificao das Variveis
 Variveis Globais
 Variveis Locais
 Variveis Dinmicas (Heap)

aelm@unicap.br

aelm@unicap.br

Gerenciamento de Memria

Gerenciamento de Memria

Variveis Globais
So alocadas AUTOMATICAMENTE no incio
da execuo do programa;
So desalocadas AUTOMATICAMENTE no
final da execuo do programa.

aelm@unicap.br

Variveis Locais
So alocadas AUTOMATICAMENTE no incio
da execuo do sub-programa no qual foram
declaradas;
So desalocadas AUTOMATICAMENTE no
final da execuo do sub-programa no qual
foram declaradas.

aelm@unicap.br

Gerenciamento de Memria
Variveis Dinmicas (Heap)
 Uma varivel heap uma varivel dinmica
que pode ser alocada e desalocada PELO
PROGRAMADOR a qualquer momento
durante a execuo do programa.
 Uma varivel heap uma varivel annima,
ou seja, sem nome, e por isso s pode ser
acessada atravs de seu endereo.

Gerenciamento de Memria
 A criao (alocao) de uma varivel heap feita
atravs de uma funo chamada alocadora.
Esta funo retorna o endereo da varivel heap
alocada.
 Funo alocadora: malloc
Sintaxe:
void * malloc qtdBytes;
Semntica:
A funo malloc retorna o endereo do bloco de
memria de tamanho qtdBytes alocado.

aelm@unicap.br

aelm@unicap.br

Gerenciamento de Memria

Gerenciamento de Memria
 Exemplo:

 Exemplo:
int * ptr1;
float * ptr2;
ptr1 = (int *) malloc(sizeof(int));
ptr2 = (float *) malloc(sizeof(float));

OBSERVAO:
Como malloc retorna ponteiro para void,
necessrio fazer a converso para o tipo de
ponteiro correspondente ao dado que ser
armazenado na heap.

ptr

(i) int * ptr;


(ii) ptr = (int *) malloc(sizeof(int));
ptr
Varivel do tipo int, annima,
alocada dinamicamente (HEAP).

(iii) *ptr = 10;


ptr
10

Varivel do tipo int, annima,


alocada dinamicamente (HEAP).

aelm@unicap.br

aelm@unicap.br

Gerenciamento de Memria

Gerenciamento de Memria

 Exemplo:

 Exemplo(cont):

(i) struct pessoa {


char nome [50];
int idade;
float peso, altura;
}
ptr
(ii) struct pessoa * ptr;

(iii) ptr = (struct pessoa *) malloc(sizeof(struct pessoa));

(iii) ptr = (struct pessoa *) malloc(sizeof(struct pessoa));

(v)ptr->peso = 54.6;

nome

ptr

idade
peso
altura

Varivel do tipo struct pessoa,


annima,alocada dinamicamente
(HEAP).

nome

ptr

nome
idade
peso
altura

Varivel do tipo struct pessoa,


annima,alocada dinamicamente (HEAP).

ptr

idade
peso

54.6

altura

aelm@unicap.br

Varivel do tipo struct pessoa,


annima,alocada dinamicamente
(HEAP).

aelm@unicap.br

Gerenciamento de Memria
 Exemplo:

ptr

(i) int * ptr;


(ii) ptr = (int *) malloc(100 * sizeof(int));
1
98 99
0
...
ptr

Varivel do tipo vetor de inteiros,


annima,alocada dinamicamente
(HEAP).

(iii) *(ptr + 1) = 5

ptr

...

98

99

Varivel do tipo vetor de inteiros,


annima,alocada dinamicamente
(HEAP).

 A destruio (desalocao) de uma varivel


heap feita atravs de uma funo chamada
desalocadora.
 Funo desalocadora: funo free

Sintaxe:
free (ponteiro);
Semntica:
A funo free devolve a memria apontada
pelo ponteiro de volta para o heap. Isso torna
a memria disponvel para alocao.

aelm@unicap.br

aelm@unicap.br

Gerenciamento de Memria

Gerenciamento de Memria

Exemplo:
free ptr;

 Observao:

ptr

IMPORTANTE:
(i)

A funo free no desaloca (destri) o ponteiro.


Ela destri apenas a varivel heap cujo
endereo estava armazenado no ponteiro;
(ii) A funo free tambm no limpa o ponteiro, o
mesmo permanece com o endereo da varivel
que foi desalocada.

 Uma varivel heap permanece


acessvel enquanto houver uma
varivel do tipo ponteiro que armazene
seu endereo.

aelm@unicap.br

aelm@unicap.br

Gerenciamento de Memria

Gerenciamento de Memria

 Problemas com Variveis Heap


 Varivel Heap Perdida
 Uma varivel heap perdida uma varivel heap
alocada mas no mais acessvel ao programa.
Tambm chamada de lixo de memria.
 A gerao de lixo de memria conhecida como
vazamento de memria.
int * ptr;
int i;

for (i = 1; i <= 10 i++) {


ptr =(int*)malloc(sizeof(int)); //cria lixo de memria
*ptr1 = i;
}

Gerenciamento de Memria

aelm@unicap.br

 Problemas com Variveis Heap


 Referncia Perdida
 Uma referncia perdida uma referncia a uma
varivel heap que foi desalocada.
 Exemplo:
int *ptr;
...
ptr = (int *) malloc (sizeof(int));
...
free ptr;
...
printf(%i,*ptr);  Referncia perdida
...
aelm@unicap.br

Gerenciamento de Memria
 Problemas com Variveis Heap
 Referncia Perdida Exemplo 2:
float *ptr1, *ptr2;

ptr1 = (float *) malloc(sizeof(float));

ptr2 = ptr1;

free ptr1;

*ptr2 = 1.6;  Referncia Perdida

aelm@unicap.br

Vous aimerez peut-être aussi