estrutura de dados aula 07 - alocação dinâmica de memória
TRANSCRIPT
# Estrutura de Dados #Aula 07 – Alocação Dinâmica de Memória
Prof. Leinylson Fontinele Pereira
13:47
Alocação Estática
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.
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
13:47
Alocação Dinâmica
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
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
13:47 8
Operador sizeof
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
Operador sizeof
13:47Estrutura 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
13:47 12
Função malloc
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
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
Função malloc
13:47Estrutura 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
13:47 17
Função free
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
Função free
13:47Estrutura 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
Função malloc – sizeof - free
13:47Estrutura 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:
(𝑓𝑙𝑜𝑎𝑡 ∗)
Função malloc – sizeof - free
13:47Estrutura 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
Função malloc – sizeof - free
13:47Estrutura 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
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
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
Função calloc
13:47Estrutura 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
Função calloc
13:47Estrutura 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
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
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
Função Realloc
13:47Estrutura 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
Função Realloc
13:47Estrutura 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
Função Realloc
13:47Estrutura 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
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
Alocação de Matrizes
13:47Estrutura 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*
Alocação de Matrizes
13:47Estrutura 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
Alocação de Matrizes
13:47Estrutura 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
Alocação de Matrizes
13:47Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória