SlideShare uma empresa Scribd logo
Bruno Luis Silveira Andretta
Bruno Silva de Oliveira
Fábio Junco Amaral
Hector Ferreira da Silva
Alocação de Memória
Alocação Estática x Dinâmica
• A linguagem de programação C/C++ permite dois tipos de
alocação de memória: Estática e Dinâmica
- Na alocação estática, o espaço de memória para as variáveis é
reservado ainda na compilação, não podendo ser alterado
depois:
int a;
int b[20];
- Na alocação dinâmica, o espaço de memória para as variáveis
pode ser alocado dinamicamente durante a execução do programa.
Uso da Memória
• Uso de variáveis globais (e estáticas):
– espaço reservado para uma variável global existe enquanto o
programa estiver sendo executado
• Uso de variáveis locais:
– espaço existe apenas enquanto a função que declarou a
variável está sendo executada, liberado para outros usos
quando a execução da função termina
• Variáveis globais ou locais podem ser simples ou vetores:
– para vetor, é necessário informar o número máximo de
elementos pois o compilador precisa calcular o espaço a
ser reservado
Alocação Dinâmica
Alocação Dinâmica
• Espaço de memória é requisitado em tempo de execução
• Espaço permanece reservado até que seja explicitamente
liberado
– depois de liberado, espaço estará disponibilizado para outros
usos e não pode mais ser acessado
– espaço alocado e não liberado explicitamente, será
automaticamente liberado quando ao final da execução
Alocação Dinâmica
Usamos alocação dinâmica quando não sabemos, no momento da
programação, a quantidade de dados que deverão ser inseridos.
É tentar responder a perguntas: quantas pessoas existem em sua turma?
Quantas letras vamos escrever, etc. Em vez de estarmos a prever um limite
superior para abarcar todas as situações, temos esta possibilidade do
dinâmico.
Além de que colocar no momento da programação cria reserva de memória por
isso, estaríamos a reservar memória para um limite que possivelmente não
iríamos ter necessidade. O exemplo típico disto é os processadores de texto.
em que não sabemos a quantidade de letras que o utilizador vai escrever.
Alocação Dinâmica
Alocação Dinâmica em C
• Funções principais (definidas na biblioteca “stdlib.h”)
– Função sizeof(...):
• retorna o número de bytes ocupado por um tipo
– Função malloc(...):
• recebe como parâmetro o número de bytes que se
deseja alocar
• retorna um ponteiro genérico para o endereço inicial
da área de memória alocada, se houver espaço livre.
Alocação Dinâmica em C
• Por exemplo:
– Alocação dinâmica de um vetor de inteiros com 10 elementos
– malloc retorna o endereço da área alocada para armazenar
valores inteiros
– ponteiro de inteiro recebe endereço inicial do espaço alocado
int *v;
v = (int *) malloc(10*sizeof(int));
Alocação Dinâmica em C
– v armazena endereço inicial de uma área contínua de
memória 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 espaço para o primeiro elemento
• v[1] acessa o segundo
• .... até v[9]
Alocação Dinâmica em C
– tratamento de erro após chamada a malloc
• imprime mensagem de erro
• aborta o programa (com a função 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 */
}
…
Alocação Dinâmica em C
• Função free (...):
– recebe como parâmetro o ponteiro da memória a ser liberada
• a função free deve receber um endereço de memória que
tenha sido alocado dinamicamente
free (v);
Alocação Dinâmica em C
Alocação Dinâmica em C++
Alocação Dinâmica em C++
//Alocação Estática
#include <iostream>
int main ()
{
int numTests;
cout << "Entre com o número de teste:";
cin >> numTests;
int testScore[numTests];
system ("pause");
return 0;
}
//Alocação Dinâmica
#include <iostream>
int main ()
{
int numTests;
cout << "Entre com o número de teste:";
cin >> numTests;
int *testScore = new int [numTests];
system ("pause");
delete testScores;
return 0;
}
Operador New

O operador new retorna o endereço onde começa o bloco de memória, e como
retorna um endereço vamos colocá-lo num ponteiro.

É um operador cuja função é alocar memória dinamicamente.

Podemos inicializar de duas maneiras:
int *valor = new int; ou int *valor = new int(5);
*valor = 5; char *letra = new char('J');

Podemos criar vetores da seguinte maneira:
int *vetor = new int[10];
char *palavra = new char[40];
Operador Delete / Memory Leak
O tempo de vida de uma variável criada dinamicamente é o tempo de execução
do programa.
Se um ponteiro aponta para uma variável dinâmica e fica fora do escopo, já não
conseguiremos ter acesso a essa memória criada dinamicamente.
A isso chama-se Memory Leak.
Explicando:
Se alocamos memória dinamicamente dentro de uma função usando um
ponteiro local, quando a função termina, o ponteiro será destruído, mas a
memória mantém-se.
Assim já não teríamos formas de chamar essa memória porque ela não
tem nome. Apenas tínhamos o endereço que estava no ponteiro.
Portanto, se realmente não necessitamos mais dos dados que estão
nessa memória dinâmica, em vez de eles estarem a ocupar espaço vamos
apagá-los.
Necessitamos de libertar essa memória através do operador delete – este
operador entrega ao sistema operativo a memoria reservada dinamicamente.
A sintaxe é :
delete ponteiro;
delete [] vetor;
Este delete não apaga o pointer mas sim a memória onde o ponteiro aponta
Operador Delete
A alocação dinâmica funciona porque a memória não é reservada no momento
da compilação, mas antes na execução.
Em vez de ser no STACK (compilação) a memória é reservada no HEAP
(execução).
O heap é uma parte da memória que é usada como memória temporária.
Heap
void myfunction()
{
int *pt = new int(1024);
int local;
....
//Sem delete
}
int main()
{
while (condição)
{
myfunction();
}
return 1;
}
Heap
Quando a função “myfunction” é chamada a variável “local” é
criada no stack e quando a função acaba a variável é retirada
do stack.
O mesmo acontece com o ponteiro “pt”, ele é uma variável
local, ou seja, quando a função acaba, o ponteiro também
termina e é retirado do stack.
Porém a memória alocada dinamicamente ainda existe. E
agora não conseguimos apagar essa memória porque ela não
tem nome e a única maneira que tínhamos para saber onde ela
estava era através do ponteiro que terminou.
Então a medida que o programa continua a operar, mais e mais
memória será perdida do heap (memória livre).
Se o programa continuar o tempo suficiente, deixaremos de ter
memória disponível e o programa deixará de operar.
Na alocação dinâmica temos de nos certificar de que a alocação no heap foi
feita com sucesso e podemos ver isso de duas maneiras:

Uma é as excepções (este é o método default)
int *bobby = new int [5];
//se falhar, é tratado como “bad_alloc” exception

nothrow, aqui no caso de não se conseguir a memória retorna um ponteiro
nulo, e o programa continua.
int *bobby = new (nothrow) int [5];
//se falhar, o ponteiro recebe NULL
Verificar a existência de memória
Schildt, H. C++ Programming Cookbook.
http://www.dainf.ct.utfpr.edu.br/~karla/
Referências

Mais conteúdo relacionado

Mais procurados

Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
Elaine Cecília Gatto
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadena
Tensor
 
Ponters
PontersPonters
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópia
Tuane Paixão
 
C fundamental
C fundamentalC fundamental
C fundamental
Selvam Edwin
 
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Codemotion
 
Object Oriented Programming using C++(UNIT 1)
Object Oriented Programming using C++(UNIT 1)Object Oriented Programming using C++(UNIT 1)
Object Oriented Programming using C++(UNIT 1)
SURBHI SAROHA
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
Marcos Castro
 
Type conversion
Type conversionType conversion
Type conversion
Frijo Francis
 
Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2
Dave Cross
 
Data structure in perl
Data structure in perlData structure in perl
Data structure in perl
sana mateen
 
Structure c
Structure cStructure c
Structure c
thirumalaikumar3
 
14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]
Cristiano Miranda
 
C Programming : Pointers and Strings
C Programming : Pointers and StringsC Programming : Pointers and Strings
C Programming : Pointers and Strings
Selvaraj Seerangan
 
Enums in c
Enums in cEnums in c
C programming - String
C programming - StringC programming - String
C programming - String
Achyut Devkota
 
R para Iniciantes
R para IniciantesR para Iniciantes
TDD in C - Recently Used List Kata
TDD in C - Recently Used List KataTDD in C - Recently Used List Kata
TDD in C - Recently Used List Kata
Olve Maudal
 
Pointers in c++ by minal
Pointers in c++ by minalPointers in c++ by minal
Pointers in c++ by minal
minal kumar soni
 
Scanner class java
Scanner class javaScanner class java

Mais procurados (20)

Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadena
 
Ponters
PontersPonters
Ponters
 
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópia
 
C fundamental
C fundamentalC fundamental
C fundamental
 
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
Why Rust? - Matthias Endler - Codemotion Amsterdam 2016
 
Object Oriented Programming using C++(UNIT 1)
Object Oriented Programming using C++(UNIT 1)Object Oriented Programming using C++(UNIT 1)
Object Oriented Programming using C++(UNIT 1)
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Type conversion
Type conversionType conversion
Type conversion
 
Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2
 
Data structure in perl
Data structure in perlData structure in perl
Data structure in perl
 
Structure c
Structure cStructure c
Structure c
 
14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]
 
C Programming : Pointers and Strings
C Programming : Pointers and StringsC Programming : Pointers and Strings
C Programming : Pointers and Strings
 
Enums in c
Enums in cEnums in c
Enums in c
 
C programming - String
C programming - StringC programming - String
C programming - String
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
TDD in C - Recently Used List Kata
TDD in C - Recently Used List KataTDD in C - Recently Used List Kata
TDD in C - Recently Used List Kata
 
Pointers in c++ by minal
Pointers in c++ by minalPointers in c++ by minal
Pointers in c++ by minal
 
Scanner class java
Scanner class javaScanner class java
Scanner class java
 

Semelhante a Alocação dinâmica em C

Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1
Ensdo
 
Pged 02
Pged 02Pged 02
Pged 02
samuelthiago
 
RevisãoAlocaçãodeMemória.pptx
RevisãoAlocaçãodeMemória.pptxRevisãoAlocaçãodeMemória.pptx
RevisãoAlocaçãodeMemória.pptx
Claudia Ferlin
 
Função malloc
Função mallocFunção malloc
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORESARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
willian324163
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
ssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
ssuserd654cb1
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
Claudia Ferlin
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
ssuserd654cb1
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
ssuserd654cb1
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
Jocelma Rios
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
André Vítor Monteiro
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Kratos879
 
Apostila c++ básico (1)
Apostila c++ básico (1)Apostila c++ básico (1)
Apostila c++ básico (1)
Alexsandro Santos
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
Elaine Cecília Gatto
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
Jose Augusto Cintra
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
Luiz Vieira .´. CISSP, OSCE, GXPN, CEH
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
PauloGomes623362
 
Alocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem CAlocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem C
Glécio Rodrigues
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Flávio Freitas
 

Semelhante a Alocação dinâmica em C (20)

Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1Estrdado materia-06-alocacao-de-memoria1
Estrdado materia-06-alocacao-de-memoria1
 
Pged 02
Pged 02Pged 02
Pged 02
 
RevisãoAlocaçãodeMemória.pptx
RevisãoAlocaçãodeMemória.pptxRevisãoAlocaçãodeMemória.pptx
RevisãoAlocaçãodeMemória.pptx
 
Função malloc
Função mallocFunção malloc
Função malloc
 
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORESARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria (1).ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria.ppt
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete (1).ppt
 
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.pptAula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
Aula_03_-_2_-_Aloca_o_Din_mica_de_Mem_ria_new_delete.ppt
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
 
Apostila c++ básico (1)
Apostila c++ básico (1)Apostila c++ básico (1)
Apostila c++ básico (1)
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdfJogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
Jogos_Eletronicos_Aula_03_Introducao_Linguagem_Lua_2014.pdf
 
Alocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem CAlocação Dinâmica em Linguagem C
Alocação Dinâmica em Linguagem C
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 

Mais de Bruno Oliveira

Construtivismo Imersivo - Revisão Sistemática da Literatura
Construtivismo Imersivo - Revisão Sistemática da LiteraturaConstrutivismo Imersivo - Revisão Sistemática da Literatura
Construtivismo Imersivo - Revisão Sistemática da Literatura
Bruno Oliveira
 
Visão geral de big data e mercado financeiro
Visão geral de big data e mercado financeiroVisão geral de big data e mercado financeiro
Visão geral de big data e mercado financeiro
Bruno Oliveira
 
Meio Ambiente com IoT na USP
Meio Ambiente com IoT na USPMeio Ambiente com IoT na USP
Meio Ambiente com IoT na USP
Bruno Oliveira
 
Wear Pay
Wear PayWear Pay
Wear Pay
Bruno Oliveira
 
Explorando novas tecnicas de comunicacao
Explorando novas tecnicas de comunicacaoExplorando novas tecnicas de comunicacao
Explorando novas tecnicas de comunicacao
Bruno Oliveira
 
Pensamento estratégico e geração de vantagem competitiva
Pensamento estratégico e geração de vantagem competitivaPensamento estratégico e geração de vantagem competitiva
Pensamento estratégico e geração de vantagem competitiva
Bruno Oliveira
 
Projeto de pesquisa - Tecnologias imersivas e letramento financeiro
Projeto de pesquisa - Tecnologias imersivas e letramento financeiroProjeto de pesquisa - Tecnologias imersivas e letramento financeiro
Projeto de pesquisa - Tecnologias imersivas e letramento financeiro
Bruno Oliveira
 
Computação em Névoa - Introdução, estado da arte e aplicações
Computação em Névoa - Introdução, estado da arte e aplicaçõesComputação em Névoa - Introdução, estado da arte e aplicações
Computação em Névoa - Introdução, estado da arte e aplicações
Bruno Oliveira
 
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
Bruno Oliveira
 
Revisão do uso de Realidade Virtual na Educação
Revisão do uso de Realidade Virtual na EducaçãoRevisão do uso de Realidade Virtual na Educação
Revisão do uso de Realidade Virtual na Educação
Bruno Oliveira
 
Monografia Computação na Névoa
Monografia Computação na NévoaMonografia Computação na Névoa
Monografia Computação na Névoa
Bruno Oliveira
 
BC - Feedbacks
BC - FeedbacksBC - Feedbacks
BC - Feedbacks
Bruno Oliveira
 
Analise da proposta de valor (fintech)
Analise da proposta de valor (fintech)Analise da proposta de valor (fintech)
Analise da proposta de valor (fintech)
Bruno Oliveira
 
Humaniza tecnocare
Humaniza tecnocareHumaniza tecnocare
Humaniza tecnocare
Bruno Oliveira
 
Caso Michigan - ITS (Sistema de Transporte Inteligente)
Caso Michigan - ITS (Sistema de Transporte Inteligente)Caso Michigan - ITS (Sistema de Transporte Inteligente)
Caso Michigan - ITS (Sistema de Transporte Inteligente)
Bruno Oliveira
 
Modelagem de sistemas - Pensamento sistêmico
Modelagem de sistemas - Pensamento sistêmicoModelagem de sistemas - Pensamento sistêmico
Modelagem de sistemas - Pensamento sistêmico
Bruno Oliveira
 
Política e cultura de segurança da informação - aspectos burocráticos
Política e cultura de segurança da informação - aspectos burocráticosPolítica e cultura de segurança da informação - aspectos burocráticos
Política e cultura de segurança da informação - aspectos burocráticos
Bruno Oliveira
 
Pensando comunicação homem máquina (em termos de ergonomia)
Pensando comunicação homem máquina (em termos de ergonomia)Pensando comunicação homem máquina (em termos de ergonomia)
Pensando comunicação homem máquina (em termos de ergonomia)
Bruno Oliveira
 
Labirintos 2D - Abordagem de grafos
Labirintos 2D - Abordagem de grafosLabirintos 2D - Abordagem de grafos
Labirintos 2D - Abordagem de grafos
Bruno Oliveira
 
Project Model Generation - Um case de implementação de escritório de projetos...
Project Model Generation - Um case de implementação de escritório de projetos...Project Model Generation - Um case de implementação de escritório de projetos...
Project Model Generation - Um case de implementação de escritório de projetos...
Bruno Oliveira
 

Mais de Bruno Oliveira (20)

Construtivismo Imersivo - Revisão Sistemática da Literatura
Construtivismo Imersivo - Revisão Sistemática da LiteraturaConstrutivismo Imersivo - Revisão Sistemática da Literatura
Construtivismo Imersivo - Revisão Sistemática da Literatura
 
Visão geral de big data e mercado financeiro
Visão geral de big data e mercado financeiroVisão geral de big data e mercado financeiro
Visão geral de big data e mercado financeiro
 
Meio Ambiente com IoT na USP
Meio Ambiente com IoT na USPMeio Ambiente com IoT na USP
Meio Ambiente com IoT na USP
 
Wear Pay
Wear PayWear Pay
Wear Pay
 
Explorando novas tecnicas de comunicacao
Explorando novas tecnicas de comunicacaoExplorando novas tecnicas de comunicacao
Explorando novas tecnicas de comunicacao
 
Pensamento estratégico e geração de vantagem competitiva
Pensamento estratégico e geração de vantagem competitivaPensamento estratégico e geração de vantagem competitiva
Pensamento estratégico e geração de vantagem competitiva
 
Projeto de pesquisa - Tecnologias imersivas e letramento financeiro
Projeto de pesquisa - Tecnologias imersivas e letramento financeiroProjeto de pesquisa - Tecnologias imersivas e letramento financeiro
Projeto de pesquisa - Tecnologias imersivas e letramento financeiro
 
Computação em Névoa - Introdução, estado da arte e aplicações
Computação em Névoa - Introdução, estado da arte e aplicaçõesComputação em Névoa - Introdução, estado da arte e aplicações
Computação em Névoa - Introdução, estado da arte e aplicações
 
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
EmoFindAR - Avaliação de jogo de realidade aumentada em crianças de escola pr...
 
Revisão do uso de Realidade Virtual na Educação
Revisão do uso de Realidade Virtual na EducaçãoRevisão do uso de Realidade Virtual na Educação
Revisão do uso de Realidade Virtual na Educação
 
Monografia Computação na Névoa
Monografia Computação na NévoaMonografia Computação na Névoa
Monografia Computação na Névoa
 
BC - Feedbacks
BC - FeedbacksBC - Feedbacks
BC - Feedbacks
 
Analise da proposta de valor (fintech)
Analise da proposta de valor (fintech)Analise da proposta de valor (fintech)
Analise da proposta de valor (fintech)
 
Humaniza tecnocare
Humaniza tecnocareHumaniza tecnocare
Humaniza tecnocare
 
Caso Michigan - ITS (Sistema de Transporte Inteligente)
Caso Michigan - ITS (Sistema de Transporte Inteligente)Caso Michigan - ITS (Sistema de Transporte Inteligente)
Caso Michigan - ITS (Sistema de Transporte Inteligente)
 
Modelagem de sistemas - Pensamento sistêmico
Modelagem de sistemas - Pensamento sistêmicoModelagem de sistemas - Pensamento sistêmico
Modelagem de sistemas - Pensamento sistêmico
 
Política e cultura de segurança da informação - aspectos burocráticos
Política e cultura de segurança da informação - aspectos burocráticosPolítica e cultura de segurança da informação - aspectos burocráticos
Política e cultura de segurança da informação - aspectos burocráticos
 
Pensando comunicação homem máquina (em termos de ergonomia)
Pensando comunicação homem máquina (em termos de ergonomia)Pensando comunicação homem máquina (em termos de ergonomia)
Pensando comunicação homem máquina (em termos de ergonomia)
 
Labirintos 2D - Abordagem de grafos
Labirintos 2D - Abordagem de grafosLabirintos 2D - Abordagem de grafos
Labirintos 2D - Abordagem de grafos
 
Project Model Generation - Um case de implementação de escritório de projetos...
Project Model Generation - Um case de implementação de escritório de projetos...Project Model Generation - Um case de implementação de escritório de projetos...
Project Model Generation - Um case de implementação de escritório de projetos...
 

Alocação dinâmica em C

  • 1. Bruno Luis Silveira Andretta Bruno Silva de Oliveira Fábio Junco Amaral Hector Ferreira da Silva Alocação de Memória
  • 2. Alocação Estática x Dinâmica • A linguagem de programação C/C++ permite dois tipos de alocação de memória: Estática e Dinâmica - Na alocação estática, o espaço de memória para as variáveis é reservado ainda na compilação, não podendo ser alterado depois: int a; int b[20]; - Na alocação dinâmica, o espaço de memória para as variáveis pode ser alocado dinamicamente durante a execução do programa.
  • 3. Uso da Memória • Uso de variáveis globais (e estáticas): – espaço reservado para uma variável global existe enquanto o programa estiver sendo executado • Uso de variáveis locais: – espaço existe apenas enquanto a função que declarou a variável está sendo executada, liberado para outros usos quando a execução da função termina • Variáveis globais ou locais podem ser simples ou vetores: – para vetor, é necessário informar o número máximo de elementos pois o compilador precisa calcular o espaço a ser reservado
  • 5. Alocação Dinâmica • Espaço de memória é requisitado em tempo de execução • Espaço permanece reservado até que seja explicitamente liberado – depois de liberado, espaço estará disponibilizado para outros usos e não pode mais ser acessado – espaço alocado e não liberado explicitamente, será automaticamente liberado quando ao final da execução
  • 7. Usamos alocação dinâmica quando não sabemos, no momento da programação, a quantidade de dados que deverão ser inseridos. É tentar responder a perguntas: quantas pessoas existem em sua turma? Quantas letras vamos escrever, etc. Em vez de estarmos a prever um limite superior para abarcar todas as situações, temos esta possibilidade do dinâmico. Além de que colocar no momento da programação cria reserva de memória por isso, estaríamos a reservar memória para um limite que possivelmente não iríamos ter necessidade. O exemplo típico disto é os processadores de texto. em que não sabemos a quantidade de letras que o utilizador vai escrever. Alocação Dinâmica
  • 9. • Funções principais (definidas na biblioteca “stdlib.h”) – Função sizeof(...): • retorna o número de bytes ocupado por um tipo – Função malloc(...): • recebe como parâmetro o número de bytes que se deseja alocar • retorna um ponteiro genérico para o endereço inicial da área de memória alocada, se houver espaço livre. Alocação Dinâmica em C
  • 10. • Por exemplo: – Alocação dinâmica de um vetor de inteiros com 10 elementos – malloc retorna o endereço da área alocada para armazenar valores inteiros – ponteiro de inteiro recebe endereço inicial do espaço alocado int *v; v = (int *) malloc(10*sizeof(int)); Alocação Dinâmica em C
  • 11. – v armazena endereço inicial de uma área contínua de memória 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 espaço para o primeiro elemento • v[1] acessa o segundo • .... até v[9] Alocação Dinâmica em C
  • 12. – tratamento de erro após chamada a malloc • imprime mensagem de erro • aborta o programa (com a função 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 */ } … Alocação Dinâmica em C
  • 13. • Função free (...): – recebe como parâmetro o ponteiro da memória a ser liberada • a função free deve receber um endereço de memória que tenha sido alocado dinamicamente free (v); Alocação Dinâmica em C
  • 15. Alocação Dinâmica em C++ //Alocação Estática #include <iostream> int main () { int numTests; cout << "Entre com o número de teste:"; cin >> numTests; int testScore[numTests]; system ("pause"); return 0; } //Alocação Dinâmica #include <iostream> int main () { int numTests; cout << "Entre com o número de teste:"; cin >> numTests; int *testScore = new int [numTests]; system ("pause"); delete testScores; return 0; }
  • 16. Operador New  O operador new retorna o endereço onde começa o bloco de memória, e como retorna um endereço vamos colocá-lo num ponteiro.  É um operador cuja função é alocar memória dinamicamente.  Podemos inicializar de duas maneiras: int *valor = new int; ou int *valor = new int(5); *valor = 5; char *letra = new char('J');  Podemos criar vetores da seguinte maneira: int *vetor = new int[10]; char *palavra = new char[40];
  • 17. Operador Delete / Memory Leak O tempo de vida de uma variável criada dinamicamente é o tempo de execução do programa. Se um ponteiro aponta para uma variável dinâmica e fica fora do escopo, já não conseguiremos ter acesso a essa memória criada dinamicamente. A isso chama-se Memory Leak. Explicando: Se alocamos memória dinamicamente dentro de uma função usando um ponteiro local, quando a função termina, o ponteiro será destruído, mas a memória mantém-se. Assim já não teríamos formas de chamar essa memória porque ela não tem nome. Apenas tínhamos o endereço que estava no ponteiro. Portanto, se realmente não necessitamos mais dos dados que estão nessa memória dinâmica, em vez de eles estarem a ocupar espaço vamos apagá-los.
  • 18. Necessitamos de libertar essa memória através do operador delete – este operador entrega ao sistema operativo a memoria reservada dinamicamente. A sintaxe é : delete ponteiro; delete [] vetor; Este delete não apaga o pointer mas sim a memória onde o ponteiro aponta Operador Delete
  • 19. A alocação dinâmica funciona porque a memória não é reservada no momento da compilação, mas antes na execução. Em vez de ser no STACK (compilação) a memória é reservada no HEAP (execução). O heap é uma parte da memória que é usada como memória temporária. Heap
  • 20. void myfunction() { int *pt = new int(1024); int local; .... //Sem delete } int main() { while (condição) { myfunction(); } return 1; } Heap Quando a função “myfunction” é chamada a variável “local” é criada no stack e quando a função acaba a variável é retirada do stack. O mesmo acontece com o ponteiro “pt”, ele é uma variável local, ou seja, quando a função acaba, o ponteiro também termina e é retirado do stack. Porém a memória alocada dinamicamente ainda existe. E agora não conseguimos apagar essa memória porque ela não tem nome e a única maneira que tínhamos para saber onde ela estava era através do ponteiro que terminou. Então a medida que o programa continua a operar, mais e mais memória será perdida do heap (memória livre). Se o programa continuar o tempo suficiente, deixaremos de ter memória disponível e o programa deixará de operar.
  • 21. Na alocação dinâmica temos de nos certificar de que a alocação no heap foi feita com sucesso e podemos ver isso de duas maneiras:  Uma é as excepções (este é o método default) int *bobby = new int [5]; //se falhar, é tratado como “bad_alloc” exception  nothrow, aqui no caso de não se conseguir a memória retorna um ponteiro nulo, e o programa continua. int *bobby = new (nothrow) int [5]; //se falhar, o ponteiro recebe NULL Verificar a existência de memória
  • 22. Schildt, H. C++ Programming Cookbook. http://www.dainf.ct.utfpr.edu.br/~karla/ Referências