Ferramentas do usuário

Ferramentas do site


malloc

A função malloc (abreviatura de memory allocation) aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço desse bloco. O número de bytes é especificado no argumento da função. No seguinte fragmento de código, malloc aloca 1 byte:

   char ptr;
   ptr = malloc (1);
   scanf ("%c", ptr);

O endereço devolvido por malloc é do tipo “genérico” void *. O programador armazena esse endereço num ponteiro de tipo apropriado. No exemplo acima, o endereço é armazenado num ponteiro-para-char.

Para alocar um tipo-de-dado que ocupa vários bytes, é preciso recorrer ao operador sizeof, que diz quantos bytes o tipo especificado tem:

   #include <stdio.h>
#include <stdlib.h>
 
 
 typedef struct {
   int dia, mes, ano; 
} data;
 
 
int main(int argc, char *argv[])
{
 
   data d;
   data *datapointer;
 
   datapointer = &d;
 
   datapointer = malloc (sizeof (data));
   datapointer->dia = 31; 
   datapointer->mes = 12; 
   datapointer->ano = 2008;
 
 
   printf("%d/%d%/%d\n",datapointer->dia,datapointer->mes,datapointer->ano);
 
 
  system("PAUSE");	
  return 0;
}
 
 

[As aparências enganam: sizeof não é uma função.]

Overhead. Cada invocação de malloc aloca um bloco de bytes consecutivos maior que o solicitado: os bytes adicionais são usados para guardar informações administrativas sobre o bloco de bytes (essas informações permitem que o bloco seja corretamente desalocado, mais tarde, pela função free). O número de bytes adicionais pode ser grande, mas não depende do número de bytes solicitado no argumento de malloc. Não é recomendável, portanto, invocar malloc repetidas vezes com argumento muito pequeno. É preferível alocar um grande bloco de bytes e retirar pequenas porções desse bloco na medida do necessário.

#include <stdio.h>
#include <stdlib.h>
 
 
char *IntToChar(int *Number){
  char retorno;    
  char *ptr = &retorno;  
  ptr = malloc((int)sizeof(Number));  
  itoa((int)Number , ptr,10);
  return ptr;
}
 
int main(int argc, char *argv[])
{
  printf("%s \n",IntToChar(1000));
  system("PAUSE");	
  return 0;
}

Teoria retirada do site http://www.ime.usp.br/~pf/algoritmos/aulas/aloca.html

malloc.txt · Última modificação: 2023/09/12 16:14 por 127.0.0.1