Pular para o conteúdo

Alocação dinâmica

A alocação dinâmica é o processo que aloca memória em tempo de execução. Ela é utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas em tempo de execução conforme a necessidade do programa. Dessa forma evita-se o desperdício de memória.
Daniel Gurgel Pinheiro dgpinheiro
Hits: 32.824 Categoria: C/C++ Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar

Parte 3: Alocação dinâmica de memória

Quando temos os arrays, devemos declará-los com uma dimensão máxima. Por exemplo, se quisessem fazer um programa para ordenar uma lista de n números, em que n seria um número a ser introduzido pelo utilizador, teriam de fazer qualquer coisa deste estilo:

#include <stdio.h>
#define N 10000
main()
{
   int a[N];  
   int n;  
   printf("Quantos números quer ordenar? ");
   scanf("%d", &n);
   if( n > N )
      printf("erro: a dimensão máxima do array é %d\n", N);
   else
      /* código para introduzir um array de n números e ordená-los */
   }
}

O programa acima tem a limitação de só funcionar quando n<=N. O truque que vos ensinei foi o de definir N como sendo um número muito grande e depois só usar parte do array. Esta solução tem a desvantagem de desperdiçar memória. Estamos a reservar um array de 10000 inteiros e muito provavelmente o número n introduzido pelo utilizador vai ser só 10 ou 20!

A alternativa a esta solução é requisitar a memória ao computador durante a própria execução do programa. A idéia é perguntar ao utilizador a dimensão do array. Se o utilizador introduzir 10, pedimos ao computador para nos dar um bloco de memória que permita guardar 10 inteiros. Deste modo, o array ocupa apenas o espaço que é estritamente necessário.

Na biblioteca stdlib.h existe uma função chamada malloc que permite requisitar ao computador n bytes de memória (malloc é uma abreviatura de memory alocation).

   1. Visão mais detalhada da memória do computador
   2. E os arrays? Como é que são guardados?
   3. Alocação dinâmica de memória
   4. Veja programa como exemplo

Acessando a porta paralela via Linux

Algum humor e C++ Design Patterns (parte 1)

Linguagem C - Funções Variádicas

Mapear objetos em C

Compilando Templates C++

O Produtor e o Consumidor

#1 Comentário enviado por tuxSoares em 02/11/2006 - 10:31h
Não entendi muita coisa mais tá de parabéns! Continue ajudando nossa comunidade, artigos como o seu são impressindiveis para o desenvolvimento intelectual de quem deseja aprender.

Vlw :)
#2 Comentário enviado por Reideer em 02/11/2006 - 10:47h
?
e como ficam lista e fila nesta historia?
acredito que tenha muitos metodos para alocação dinâmica.
#3 Comentário enviado por AboutDiego em 02/11/2006 - 23:34h
Vale ressaltar que dependendo do seu compilador pode também possuir o arquivo oculo malloc.h, tem o mesmo efeito que stdlib.h na hora da alocação dinâmica só muda em que na parte onde você coloca p=(int*)malloc, você colocará p=(int*)calloc

Obs: Somente para abrir um pouco mais o leque ^^. falouz
#4 Comentário enviado por balani em 03/11/2006 - 20:58h
Interessante, eu só não entendi ainda onde usar.
#5 Comentário enviado por AboutDiego em 04/11/2006 - 00:15h
Como utilizar o alocamento de memória ou como utilizar o documento??
#7 Comentário enviado por juniomundo em 06/11/2010 - 16:53h
Ótimo. Muito obrigado. Está sendo de grande valia.

Contribuir com comentário

Entre na sua conta para comentar.