Buscar

2021 1_Estrutura_de_Dados_aula03

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 9 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 9 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 9 páginas

Prévia do material em texto

08/03/2021
1
ESTRUTURA DE DADOS EM C
Aula 03 – Alocação dinâmica de Memória.
Operações básicas.
Prof. Ronaldo Candido
ronaldo.candido@estacio.br 2021.1
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Conteúdo Programático
1. Alocação dinâmica de memória.
2. Vantagens e desvantagens da alocação
dinâmica x estática.
3. Alocação estática.
4. Alocação dinâmica.
5. Reservando espaços de memória.
6. Atividade verificadora de aprendizagem.
Objetivos da aula
• Entender como ocorre a alocação dinâmica de memória e sua diferença em
relação à alocação estática, além de aplicar os recursos oferecidos por ponteiros
para manipular a área de memória e os dados de forma mais precisa.
1
2
08/03/2021
2
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Situação-Problema
• Imagine a necessidade de criar uma lista com todo o catálogo de medicamentos
de um laboratório. Sabendo que o catálogo contém n produtos, criamos uma lista
com n posições para inserir os produtos. Mas se forem criados novos produtos ?
Como uma solução, pode ser criada uma lista bem grande, que acomodaria novos
produtos, mas com isso desperdiçamos memória. Como poderia ser criada uma
lista que conseguiria receber novos produtos, mas sem desperdiçar espaço de
memória ?
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
• Assistir previamente o vídeo "Alocação Dinâmica - Parte 1 - Introdução". Disponível
em: <https://www.youtube.com/watch?v=ErOmueylikM> Acesso em 8 Mar. 2021.
• Usar o DEV-C++ ou editor de código equivalente para implementar os exemplos e
exercícios.
• Realizar as atividades autônomas Aura.
• Expandir seus conhecimentos sobre o assunto em Aprenda+ e Referências.
Roteiro da aula
É de fundamental importância 
o aluno realizar o estudo 
prévio dessas atividades !!!
3
4
08/03/2021
3
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Alocação dinâmica de memória
• A utilização de memória por parte do programador não é um conceito novo, sendo
que linguagens de nível mais baixo, como linguagens de máquina utilizam alocação
de memória o tempo todo. Exemplo em Linguagem Assembly :
ADD A, @RI ; //(mnemônico (Intel 80C51) que executa a soma do conteúdo da RAM interna
apontada por RI ao Acumulador).
• O uso de alocação dinâmica aumenta a eficiência em
certas rotinas embora aumente o gasto de
processamento.
• Os programas são alocados ESTATICAMENTE na
compilação e DINAMICAMENTE durante a execução.
• A alocação dinâmica é feita através de operações de
alocação, realocação e liberação de memória.
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Vantagens e desvantagens da alocação dinâmica x estática
• Alocação estática : Vantagem – Processamento mais leve. Array.
Desvantagem - Desperdício de memória.
• Alocação dinâmica : Vantagem – Diminuir/aumentar memória em execução. Ponteiro.
Desvantagem - Gasto de processamento.
5
6
08/03/2021
4
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Alocação Estática
• Implementação simples: vetores (array).
• vantagem:
 acesso indexado (vi)- todos os elementos da estrutura são igualmente acessíveis.
• desvantagens:
 tamanho fixo: #define maxTam 1000
 tempo de compilação.
 alocados em memória de forma estática.
#define maxTam 1000
struct rgCliente {
char nome[40];
char sexo;
int idade;
};
struct rgCliente Cliente[maxTam];
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Alocação Dinâmica
• Implementação eficiente: Ponteiros.
• vantagens:
 tamanho variável.
 tempo de execução.
 alocados em memória de forma dinâmica.
• desvantagem, ou restrição:
 capacidade da memória, acesso não-sequencial.
struct rgCliente {
char nome[40];
char sexo;
int idade;
};
struct rgCliente *ptCliente;
7
8
08/03/2021
5
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Reservando espaços de memória
• O padrão C ANSI define apenas 4 funções para o sistema de alocação dinâmica,
disponíveis na biblioteca stdlib.h:
 malloc
 calloc
 realloc
 free
• Usamos também a função sizeof() para saber a quantidade de bytes alocada:
int a = 10 ;
printf(“%d”, sizeof(a)) ; //exibirá 4
• Podemos também usar um “modelador” de tipos (cast) quando desejamos mudar o
tipo do valor:
float valor ;
valor = (float) a / 3;
printf("\n%f",valor) ; //exibirá 3.3333333 ao invés de 3.000000 sem o cast
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Função malloc()
• Serve para alocar memória e tem o seguinte protótipo:
void *malloc (unsigned int num);
• A função pega o número de bytes que queremos alocar (num), aloca na memória e
retorna um ponteiro void* para o primeiro byte alocado.
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int *p, a;
/* Determina o valor de a em algum lugar */
p = (int *)malloc(a*sizeof(int));
if (!p) { printf ("** Erro: Memoria Insuficiente**");
exit(1); }
return 0; }
A função calloc() tem 
um protótipo diferente e 
inicializa o espaço 
alocado com 0. 
Realloc() modifica o
espaço anteriormente
reservado.
9
10
08/03/2021
6
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Liberando a memória reservada
• Quando alocamos memória dinamicamente é necessário que a liberemos quando
ela não for mais necessária.
• Para isto existe a função free() cujo protótipo é: void free (void *p);
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int *p, a;
p = (int *)malloc(a*sizeof(int));
if (!p) { printf ("** Erro: Memoria Insuficiente**");
exit(1); }
...
free(p) ; /* Libera da memória os bytes do ponteiro */
return 0; }
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
//EDA_Aula03_Exemplo02
#include <stdio.h>
#include <stdlib.h>
int main() {
char *c= NULL; /* o ponteiro para o espaço alocado */
/* alocar um único byte na memória */
c = (char *)malloc(1);
/* ver se conseguiu alocar */
if (!c) { printf("Não conseguiu alocar a memória\n");
exit(1); }
/* carregar um valor na região de memória alocada */
*c = 'd';
printf("%c\n",*c); /* escrever este valor */
free(c); /* liberar a memória alocada */
}
11
12
08/03/2021
7
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Atividade Verificadora de Aprendizagem
1. Citar quais os ganhos em utilizar a alocação dinâmica em relação ao uso de arrays.
Demonstrar em um código em C o uso das funções sizeof e cast, indicando qual a
quantidade de memória deverá ser alocada, no caso de sizeof, e qual o tipo que
deverá ser utilizado a partir do cast (usar a struct rgCliente, por exemplo).
2. Acessar <https://www.menti.com/o18vakfuvy> e responder a questão.
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Aprenda +
• Assistir o vídeo "Alocação Dinâmica - Parte 1 - Introdução". Disponível em:
<https://www.youtube.com/watch?v=ErOmueylikM> Acesso em 8 Mar. 2021.
• Assistir o vídeo "Programar em C - Operador sizeof()". Disponível em:
<https://www.youtube.com/watch?v=FD0bi4H08IU> Acesso em 8 Mar. 2021.
• Atividade Autônoma Aura:
1) A alocação de memória é dividida em partes. Qual decisão da alocação é tomada quando o
programa é compilado ?
a) Alocação Dinâmica.
b) Alocação Estática.
c) Alocação Híbrida.
d) Alocação Local.
e) Em todas as partes.
13
14
08/03/2021
8
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
Aprenda + (continuação)
2) Em relação ao conceitos e operadores usados em alocação estática e dinâmica, assinale a
afirmação correta:
a) Alocação dinâmica permite aumentar a quantidade de memória alocada, mas não permite a
redução.
b) Para alocar memória dinamicamente, é necessário antes, separar o espaço de memória que
será disponibilizado para o recurso.
c) Alocação estática permite apenas o uso de arrays para interagir com a memória.
d) Alocação dinâmica poupa memória embora gere maior gasto de processamento.
e) Função sizeof determina o número de bits para um determinado tipo de dados.
AULA 03
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
1. KOFFMAN, E.B., Wolfgang, P.A.T. Objetos, Abstração, Estrutura de dados e Projeto 
usando C++. 1ª Ed.. Rio deJaneiro: LTC, 2008. R.5 Objetos, Ponteiros e Referência. 
Disponível em: <https://integrada.minhabiblioteca.com.br/#/books/978-85-216-2780-
7/cfi/6/16!/4/432/2@0:96.2> Acesso em 1 Mar. 2021.
2. BALIEIRO, Ricardo. Estrutura de dados. Rio de Janeiro: Universidade Estácio de Sá, 
2015. Cap. 4. Disponível em: 
<http://repositorio.novatech.net.br/site/index.html#/objeto/detalhes/2D35A184-
BF64-4419-9DA9-D1ED12A97017> Acesso em 22 Fev. 2021.
3. Alocação Dinâmica em C. Disponível em: 
<http://linguagemc.com.br/alocacaodinamica-de-memoria-em-c/> Acesso em 8 Mar. 
2021.
4. Alocação Dinâmica. Disponível em: 
<https://www.ic.unicamp.br/~norton/disciplinas/mc1022s2005/03_11.html> Acesso 
em 8 Mar. 2021.
Referências
15
16
08/03/2021
9
ESTRUTURA DE DADOS EM C
Prof. Ronaldo Candido
ronaldo.candido@estacio.br
Dúvidas, sugestões ou análises ???
17

Continue navegando

Outros materiais