Ferramentas do usuário

Ferramentas do site


malloc
no way to compare when less than two revisions

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.


malloc [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1
Linha 1: Linha 1:
 +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:
 +<code c>
 +   char ptr;
 +   ptr = malloc (1);
 +   scanf ("%c", ptr);
 +</code>
 +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:
 +<code c>
 +   #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;
 +}
 +
 +   
 +</code>
 +
 +[As aparências enganam: [[sizeof|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. 
 +
 +<code c>
 +
 +#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;
 +}
 +
 +</code>
 +
 +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