3. AlocaçãoEstática
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Na alocação estática de memória, os tipos de dados tem
tamanho predefinido.
O compilador vai alocar de forma automática o espaço de
memória necessário.
Este tipo de alocação tende a desperdiçar recursos, já que nem
sempre é possível determinar previamente qual é o espaço
necessário para armazenar as informações.
4. AlocaçãoEstática
13:47
Estrutura 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 do
que faltar espaço!
Quando um programador define o tipo e o número de
elementos de um vetor, ele está utilizando alocação estática
6. AlocaçãoDinâmica
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Na alocação dinâmica podemos alocar espaços durante a
execução de um programa
Isto é bem interessante do ponto de vista do programador,
pois permite que o espaço em memória seja alocado apenas
quando necessário
Além disso, permite aumentar ou até diminuir a quantidade
de memória alocada
7. 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
9. Operador sizeof
13:47
Alocar memória do tipo int é diferente de alocar memória
do tipo char
Tipos diferentes podem ter tamanhos diferentes na
memória
𝐶ℎ𝑎𝑟 ∶ 1 𝑏𝑦𝑡𝑒
𝐼𝑛𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠
𝐹𝑙𝑜𝑎𝑡 ∶ 4 𝑏𝑦𝑡𝑒𝑠
𝐷𝑜𝑢𝑏𝑙𝑒 ∶ 8 𝑏𝑦𝑡𝑒𝑠
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
13. Função malloc
13:47
Serve para alocar memória durante a execução
Ela faz o pedido de memória ao computador e retorna
um ponteiro com o endereço do início do espaço de
memória alocado
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
14. 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
18. 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
21. Função malloc – sizeof - free
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
22. Função malloc – sizeof - free
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
𝟏 ‐ Calcularo númerode bytesnecessá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
𝑚𝑎𝑙𝑙𝑜𝑐(𝑛𝑢𝑚_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡𝑒𝑠 ∗ 𝑠𝑖𝑧𝑒𝑜𝑓(𝑓𝑙𝑜𝑎𝑡))
𝟑 ‐ Convertero ponteiro parao tipo de dadosdesejado
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:
(𝑓𝑙𝑜𝑎𝑡 ∗)
23. Função malloc – sizeof - free
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
24. Função malloc – sizeof - free
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
25. Função malloc – sizeof - free
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
27. Função calloc
13:47
Estrutura 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 retorna
um ponteiro com o endereço do início do espaço de
memória alocado
28. Função calloc
13:47
Estrutura 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
33. Função Realloc
13:47
Alocar ou realocar memória durante a execução
Ela faz o pedido de memória ao computador e retorna
um ponteiro com o endereço do início do espaço de
memória alocado
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
34. 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 array
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
40. 13:47 40
Alocação de Matrizes
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
41. Alocaçãode Matrizes
13:47
Para alocar um array multidimensional, precisamos
utilizar o conceito de ponteiro para ponteiro
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
43. Alocaçãode Matrizes
13:47
Estrutura de Dados: Aula 07 – Alocação Dinâmica de Memória
Em um ponteiro para ponteiro, cada nível do ponteiro
permite criar uma nova dimensão no array
int* -> permite criar um array de int
int** -> permite criar um array de int*