estrutura de dados aula 07 - alocação dinâmica de memória

49
# Estrutura de Dados # Aula 07 Alocação Dinâmica de Memória Prof. Leinylson Fontinele Pereira

Upload: leinylson-fontinele

Post on 12-Apr-2017

139 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

# Estrutura de Dados #Aula 07 – Alocação Dinâmica de Memória

Prof. Leinylson Fontinele Pereira

Page 2: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47

Alocação Estática

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 3: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação Estática

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Na alocação estática de memória, os tipos de dados temtamanho predefinido.

O compilador vai alocar de forma automática o espaço dememória necessário.

Este tipo de alocação tende a desperdiçar recursos, já que nemsempre é possível determinar previamente qual é o espaçonecessário para armazenar as informações.

Page 4: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação Estática

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Quando não se conhece o espaço total necessário, a tendênciaé o programador exagerar pois é melhor superdimensionar doque faltar espaço!

Quando um programador define o tipo e o número deelementos de um vetor, ele está utilizando alocação estática

Page 5: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47

Alocação Dinâmica

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 6: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação Dinâmica

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Na alocação dinâmica podemos alocar espaços durante aexecução de um programa

Isto é bem interessante do ponto de vista do programador,pois permite que o espaço em memória seja alocado apenasquando necessário

Além disso, permite aumentar ou até diminuir a quantidadede memória alocada

Page 7: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Prática

13:47 7

As aulas práticas foram baseadas no material de

Linguagem C Descomplicada , Dr. André R. Backes.

Disponível em: https://programacaodescomplicada.wordpress.com/

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 8: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 8

Operador sizeof

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 9: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Operador sizeof

13:47

Alocar memória do tipo int é diferente de alocar memóriado tipo char

Tipos diferentes podem ter tamanhos diferentes namemória

𝐶ℎ𝑎𝑟 ∶ 1 𝑏𝑦𝑡𝑒𝐼𝑛𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠𝐹𝑙𝑜𝑎𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠𝐷𝑜𝑢𝑏𝑙𝑒 ∶ 8 𝑏𝑦𝑡𝑒𝑠

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 10: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Operador sizeof

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 11: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Operador sizeof

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 12: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 12

Função malloc

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 13: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc

13:47

Serve para alocar memória durante a execução

Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 14: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc

13:47

A função maloc() recebe por parâmetro:

A quantidade de bytes a ser alocada

A função retorna:

NULL: no caso de erro

Ponteiro para a primeira posição do array

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 15: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 16: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 17: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 17

Função free

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 18: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função free

13:47

A função free libera o espaço de memória alocado

Sempre que alocamos memória é necessário liberá-la

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 19: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 20: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 20

Exemplo!

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 21: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc – sizeof - free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 22: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc – sizeof - free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

𝟏 ‐ Calcular o número de bytes necessários

Primeiramente multiplicamos o número de componentes do vetor pela quantidade de bytes que é dada pelo comando 𝑠𝑖𝑧𝑒𝑜𝑓

𝑛𝑢𝑚_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑒𝑠 ∗ 𝑠𝑖𝑧𝑒𝑜𝑓(𝑓𝑙𝑜𝑎𝑡)

𝟐 ‐ Reservar a quantidade de memória

Usamos𝑚𝑎𝑙𝑙𝑜𝑐 para reservar essa quantidade de memória

𝑚𝑎𝑙𝑙𝑜𝑐(𝑛𝑢𝑚_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑒𝑠 ∗ 𝑠𝑖𝑧𝑒𝑜𝑓(𝑓𝑙𝑜𝑎𝑡))

𝟑 ‐ Converter o ponteiro para o tipo de dados desejado

Como a função 𝑚𝑎𝑙𝑙𝑜𝑐 retorna um ponteiro do tipo 𝑣𝑜𝑖𝑑, precisamos converter esse ponteiro para o tipo da nossa variável,no caso 𝑓𝑙𝑜𝑎𝑡, por isso usamos o comando de conversão explicita:

(𝑓𝑙𝑜𝑎𝑡 ∗)

Page 23: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc – sizeof - free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 24: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc – sizeof - free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 25: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função malloc – sizeof - free

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 26: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 26

Função calloc

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 27: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função calloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Serve para alocar memória durante a execução

Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado

Page 28: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função calloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

A função calloc() recebe por parâmetro:

Numero de elementos no array a ser alocado

Tamanho de cada elemento do array

A função retorna:

NULL: no caso de erro

Ponteiro para a primeira posição do array

Page 29: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função calloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 30: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função calloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 31: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função calloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 32: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 32

Função Realloc

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 33: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47

Alocar ou realocar memória durante a execução

Ela faz o pedido de memória ao computador e retornaum ponteiro com o endereço do início do espaço dememória alocado

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 34: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47

A função realloc() recebe por parâmetro:

Ponteiro para um bloco de memória já alocado

A quantidade de bytes a ser alocada

A função retorna:

NULL: no caso de erro

Ponteiro para a primeira posição do arrayEstrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 35: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 36: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 37: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 38: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 39: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Função Realloc

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 40: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

13:47 40

Alocação de Matrizes

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 41: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47

Para alocar um array multidimensional, precisamosutilizar o conceito de ponteiro para ponteiro

Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 42: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 43: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Em um ponteiro para ponteiro, cada nível do ponteiropermite criar uma nova dimensão no array

int* -> permite criar um array de int

int** -> permite criar um array de int*

Page 44: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 45: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 46: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 47: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 48: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alocação de Matrizes

13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória

Page 49: Estrutura de Dados Aula 07 - Alocação dinâmica de memória

Alguma Dúvida?

13:47

Até a próxima aula...

[email protected]