Buscar

02-Alocação de Memória e Operadores New e Delete

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 17 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

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 6, do total de 17 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

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 9, do total de 17 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
Profa. Dra. Ieda Hidalgo
E-mail: iedahidalgo@ft.unicamp.br
Alocação Estática e Dinâmica 
de Memória
Operadores New e Delete
2
Definição
Alocação de memória diz respeito à forma
como a memória se organiza para a
execução de um programa.
Um programa pode alocar memória de
forma:
� Estática (antes da execução – em
tempo de compilação)
� Dinâmica (durante a execução do
programa).
3
Exemplo de 
Organização da Memória
4
Alocação Estática
Para a alocação estática de memória é
necessário estabelecer previamente a
quantidade de memória necessária (e isso não
pode ser alterado durante execução do
programa).
Dessa forma, os dados são organizados
sequencialmente na memória. Isso facilita a
localização e a manipulação dos dados.
Esse tipo de alocação ocorre na declaração de
variáveis estáticas e globais.
5
Alocação Dinâmica
Alocação dinâmica é o meio pelo qual um programa
pode alocar / liberar memória durante a execução do
programa (otimiza o uso da memória).
Isso é feito na área heap do sistema, ou seja, na área
disponível da memória após serem alocados código
e variáveis estáticas e globais do programa.
Essa forma de alocação de memória apresenta duas
vantagens:
(1) Não é necessário definir a priori o número de
posições de memória necessárias.
(2) É possível reduzir ou aumentar a quantidade de
memória alocada inicialmente.
6
Um vetor pode ser alocado de forma estática ou dinâmica.
Para alocar memória dinamicamente em
C++ são usados os operadores new e
delete.
7
Por que gerenciar 
dinamicamente a memória?
Vamos supor que você queira escrever um programa
para gerenciar os funcionários de uma empresa.
Você pode fixar um número máximo de funcionários e
criar um vetor estático com esse número de objetos.
Isso pode ser ineficiente em duas situações:
(1) Se a empresa tiver poucos funcionários, você
estará reservando memória inútilmente.
(2) Se o número pré-fixado for inferior ao número de
funcionários da empresa, haverá “estouro de pilha”.
8
Solução
A solução para esse tipo de problema é
gerenciar dinamicamente a memória.
Em C, são usadas as função:
malloc() e free().
Em C++, são usados os operadores:
new e delete.
9
Diferenças entre 
“malloc / free” e “new / delete” (1)
Em C, malloc() e free() estão em bibliotecas
(stdlib.h e alloc.h).
Em C++, o gerenciamento dinâmico de
memória é tão relevante que as palavras new e
delete foram incorporadas à linguagem.
10
Diferenças entre 
“malloc / free” e “new / delete” (2)
Em C, é necessário informar a malloc() o
tamanho do tipo para o qual se pede memória
(usando sizeof()).
Em C++, o operador new descobre o tamanho
do tipo para o qual se pede memória
automaticamente.
11
Diferenças entre 
“malloc / free” e “new / delete” (3)
Em C, o ponteiro genérico void que o SO
devolve ao programa deve ser formatado
explicitamente para o tipo do ponteiro (risco
de erros).
Em C++ essa conversão é feita pelo próprio
operador new.
12
Diferenças entre 
“malloc / free” e “new / delete” (4)
Em C, para inicializar um ponteiro é
necessário usar uma terceira função: calloc().
Em C++, para inicializar um ponteiro basta
usar a sintaxe: new tipo(inicializador).
13
Diferenças entre 
“malloc / free” e “new / delete” (5)
A sintaxe usada em C++ é mais simples do que em C, 
conforme mostra a tabela abaixo.
Resumindo, new e delete são mais confiáveis e mais
fáceis de usar que malloc e free.
Tanto malloc / free quanto new / delete retornam um
ponteiro nulo quando a memória disponível é
insuficiente. Portanto, é importante verificar o
sucesso da alocação de memória.
14
Operador New
O operador new obtém memória do SO e
retorna um ponteiro para o primeiro byte
do novo bloco de memória que foi alocado.
Uma vez alocada, esta memória continua
ocupada (ou seja, a variável criada pelo
operador new pode ser acessada por
qualquer parte do programa) até que seja
desalocada explicitamente pelo operador
delete.
15
Formas do Operador New
O operador new conhece a classe do objeto sendo
alocado e, automaticamente, chama o construtor para
inicializar a memória alocada.
16
Operador Delete
Quando o espaço reservado na área de heap
não mais for necessário, deve-se liberá-lo para
outra utilização usando o operador delete. O
operador delete necessita do ponteiro que
identifica a região do heap, cujo valor foi
reservado na chamada de new.
17
Formas do Operador Delete
Liberar a memória não libera o ponteiro que aponta
para ela, simplesmente o endereço não é mais
válido.

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes