A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação.

Apresentações semelhantes


Apresentação em tema: "Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação."— Transcrição da apresentação:

1 Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação

2 Revisando Vimos anteriormente que no momento em que declaramos um vetor, o mesmo é alocado na memória de forma sequencial. Vimos anteriormente que no momento em que declaramos um vetor, o mesmo é alocado na memória de forma sequencial. Assim, no momento que o programa é executado, temos que o endereço de vetor é C8 Assim, no momento que o programa é executado, temos que o endereço de vetor é C8

3 Revisando O mesmo acontece para uma matriz alocada estaticamente. Todas as posições estão ocupando a memória de forma sequencial. O mesmo acontece para uma matriz alocada estaticamente. Todas as posições estão ocupando a memória de forma sequencial. Ao alocar a matriz de forma sequencial, temos um pró e um contra. Quais seriam eles? Ao alocar a matriz de forma sequencial, temos um pró e um contra. Quais seriam eles?

4 Revisando O fato da matriz estar alocada de forma sequencial dá rapidez ao acesso de elementos. O fato da matriz estar alocada de forma sequencial dá rapidez ao acesso de elementos. Porém, em memórias fragmentadas, impede a alocação de uma matriz de tamanho relativamente grande. Porém, em memórias fragmentadas, impede a alocação de uma matriz de tamanho relativamente grande. E em programas em que a necessidade de memória é variável, sempre precisamos alocar memória para o pior caso. E em programas em que a necessidade de memória é variável, sempre precisamos alocar memória para o pior caso. Como podemos solucionar esse problema? Como podemos solucionar esse problema?

5 Alocação Dinâmica Ferramenta que possibilita a reserva de memória em tempo de execução. Ferramenta que possibilita a reserva de memória em tempo de execução. Possibilita a criação de programas mais eficientes, com um menor consumo de memória. Possibilita a criação de programas mais eficientes, com um menor consumo de memória. Como toda ferramenta, a alocação dinâmica tem suas vantagens e desvantagens. Como toda ferramenta, a alocação dinâmica tem suas vantagens e desvantagens.

6 Alocação Dinâmica O primeiro passo para alocar vetores e matrizes de maneira dinâmica é aprendendo a utilizar as seguintes funções: O primeiro passo para alocar vetores e matrizes de maneira dinâmica é aprendendo a utilizar as seguintes funções: void* malloc(int size) void* malloc(int size) void* calloc(int n, int size) void* calloc(int n, int size) void* realloc(void* pointer, int size) void* realloc(void* pointer, int size) void free(void* pointer) void free(void* pointer)

7 Malloc void* malloc(int size) Aloca na memória o número de bytes definido por size, e retorna o endereço do primeiro elemento desse espaço alocado. Aloca na memória o número de bytes definido por size, e retorna o endereço do primeiro elemento desse espaço alocado. O retorno é do tipo void*, logo, é sempre necessário utilizar um cast ao se usar a função malloc. O retorno é do tipo void*, logo, é sempre necessário utilizar um cast ao se usar a função malloc. É recomendado sempre o uso do sizeof() para calcular a quantidade de espaço a ser alocada. É recomendado sempre o uso do sizeof() para calcular a quantidade de espaço a ser alocada.

8 void* malloc(int size) Caso não haja espaço suficiente na memória para alocar, a função retornará NULL Caso não haja espaço suficiente na memória para alocar, a função retornará NULL Dessa maneira, podemos verificar durante a execução se o programa deve continuar ou finalizar usa execução. Dessa maneira, podemos verificar durante a execução se o programa deve continuar ou finalizar usa execução. Esse comportamento é igual para todas as funções de alocação que veremos. Esse comportamento é igual para todas as funções de alocação que veremos. Malloc

9 Malloc void* malloc(int size)

10 Calloc void* calloc(int n, int size) Aloca na memória o número de bytes definido por size multiplicado pelo valor de n, e retorna o endereço do primeiro elemento desse espaço alocado. Aloca na memória o número de bytes definido por size multiplicado pelo valor de n, e retorna o endereço do primeiro elemento desse espaço alocado. A memória alocada é limpa no processo. A memória alocada é limpa no processo. Assim como o malloc, deve ser feito um cast no retorno. Assim como o malloc, deve ser feito um cast no retorno. É recomendado sempre o uso do sizeof() para calcular a quantidade de espaço a ser alocada. É recomendado sempre o uso do sizeof() para calcular a quantidade de espaço a ser alocada.

11 Calloc void* calloc(int n, int size)

12 Realloc void* realloc(void* pointer, int size) Aloca na memória o número de bytes definido por size, e retorna o endereço do primeiro elemento desse espaço alocado. Aloca na memória o número de bytes definido por size, e retorna o endereço do primeiro elemento desse espaço alocado. No processo, os elementos atuais da memória apontada por pointer são copiados No processo, os elementos atuais da memória apontada por pointer são copiados Caso não haja memória suficiente, NULL é retornado e pointer permanece inalterado. Caso não haja memória suficiente, NULL é retornado e pointer permanece inalterado. Assim como no malloc e calloc, deve ser feito o cast do retorno. Assim como no malloc e calloc, deve ser feito o cast do retorno.

13 Realloc void* realloc(void* pointer, int size) De acordo com o visto, qual o problema em usar o seguinte código: De acordo com o visto, qual o problema em usar o seguinte código:

14 Realloc void* realloc(void* pointer, int size)

15 Free void free(void* pointer) Libera o espaço de memória alocado apontado por pointer que foi previamente alocado utilizando umas da funções vistas anteriormente. Libera o espaço de memória alocado apontado por pointer que foi previamente alocado utilizando umas da funções vistas anteriormente. Caso não seja utilizada, o espaço alocado permanecerá bloqueado para outros usos. Caso não seja utilizada, o espaço alocado permanecerá bloqueado para outros usos.

16 Alocação Dinâmica de Matrizes Vimos como alocar um vetor dinamicamente, mas como faríamos para criar uma matriz? Vimos como alocar um vetor dinamicamente, mas como faríamos para criar uma matriz? Podemos utilizar ponteiros em vários níveis. Podemos utilizar ponteiros em vários níveis.

17 Alocação Dinâmica de Matrizes Vemos assim que, apesar de ocupar mais espaço, uma matriz alocada dinamicamente nos permite utilizar a memória de maneira mais eficiente. Vemos assim que, apesar de ocupar mais espaço, uma matriz alocada dinamicamente nos permite utilizar a memória de maneira mais eficiente. Mas isso tem um pequeno custo, já que o acesso aos elementos é feito de forma indireta. Mas isso tem um pequeno custo, já que o acesso aos elementos é feito de forma indireta. É importante notar que esse mesmo processo poderia ser feito para diversas dimensões. É importante notar que esse mesmo processo poderia ser feito para diversas dimensões.

18 Alocação Dinâmica Dúvidas?

19 Exercício 1 Crie um programa que receba inteiros do usuário e armazene-os em um array, sempre que este array ficar cheio, dobre seu tamanho, quando isso acontecer imprima na tela: Array realocado. Crie um programa que receba inteiros do usuário e armazene-os em um array, sempre que este array ficar cheio, dobre seu tamanho, quando isso acontecer imprima na tela: Array realocado. Inicie o array com tamanho 1. O programa finalizará se o numero 0 for digitado, e, nessa hora, deverá imprimir os valores recebidos até então. Lembre-se de liberar a memória. Inicie o array com tamanho 1. O programa finalizará se o numero 0 for digitado, e, nessa hora, deverá imprimir os valores recebidos até então. Lembre-se de liberar a memória.

20 Exercício 2 Escreva um programa que receba a quantidade de linhas e colunas de uma matriz nxm, armazene essa matriz utilizando alocação dinâmica e imprima sua matriz transposta. Escreva um programa que receba a quantidade de linhas e colunas de uma matriz nxm, armazene essa matriz utilizando alocação dinâmica e imprima sua matriz transposta. O programa só deve encerrar se a quantidade de linhas ou a quantidade de colunas dada pelo usuário for zero. O programa só deve encerrar se a quantidade de linhas ou a quantidade de colunas dada pelo usuário for zero. Lembre-se de liberar o espaço alocado para a matriz ao final de cada iteração, e de verificar se as alocações ocorreram com sucesso. Lembre-se de liberar o espaço alocado para a matriz ao final de cada iteração, e de verificar se as alocações ocorreram com sucesso.


Carregar ppt "Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação."

Apresentações semelhantes


Anúncios Google