A diferença fundamental entre malloc e calloc a função é a de que calloc() necessita de dois argumentos, em vez de um argumento que é exigido por malloc(). Tanto malloc() quanto calloc () são as funções que a linguagem de programação C fornece para alocação dinâmica de memória e des-alocação em tempo de execução.
Antes de compreender as funções malloc() e calloc() primeiro, vamos entender o significado da alocação dinâmica de memória. Alocação de memória é o procedimento de atribuir a memória do computador para a execução de programas e processos. Usamos técnicas de alocação dinâmica quando não se sabe antes quanto espaço de memória é necessário para o programa e processo.
alocação dinâmica de memória surge devido aos problemas associados com alocação estática de memória, como se menos elementos são armazenados, então o resto da memória é desnecessariamente desperdiçado. Portanto, supera os problemas de alocação de memória estática onde a memória é alocada apenas quando é necessária.conteúdo: malloc() Vs calloc()
- Gráfico de Comparação
- Definição
- principais Diferenças
- Conclusão
Gráfico de Comparação
Base de comparação | malloc() | calloc() |
---|---|---|
Nº de blocos | Atribui único bloco de exigiu memória. | atribui vários blocos da memória solicitada. |
Sintaxe | void *malloc(size_t size); | void *calloc(size_t num, size_t tamanho); |
inicialização | malloc() não desimpede e inicializa a memória atribuída. | a memória alocada é inicializada para zero usando calloc(). |
modo de alocação | malloc() função aloca a memória do tamanho ‘Tamanho’ do heap. | calloc() função aloca a memória cujo tamanho é igual ao tamanho de um*. |
velocidade | rápida | comparativamente lenta. |
Definição de malloc()
A função malloc atribui um bloco de memória em bytes. O Usuário deve dar explicitamente o tamanho do bloco, que requer para o uso.
através do programa de função malloc requisita RAM do sistema para alocação da memória, se o pedido é concedido (ou seja, a função malloc diz sucesso na alocação de memória), ele retorna um ponteiro para o primeiro bloco de memória. Ele retorna tipo vazio de ponteiro, o que significa que qualquer tipo de ponteiro pode ser atribuído.
embora, ele retorna um nulo, se as funções malloc não é capaz de alocar a quantidade necessária de memória. A função malloc está acessível no TURBO C, header file alloc.h
ou stdlib.h
, e no UNIX estará disponível no header file <malloc.h>
.
a SINTAXE
A sintaxe desta função é a seguinte:
malloc(number of elements * size of each element);
por exemplo,int *ptr;
ptr=malloc(10*sizeof (int))
Onde o tamanho representa o tamanho de memória necessário em bytes(por exemplo,, o número de locais de memória contígua a serem alocados).
mas como mencionado antes que a função malloc retorna um ponteiro vazio, consequentemente um operador de elenco é necessário para mudar o tipo de ponteiro retornado com base em nossa necessidade, a declaração acima pode ser apresentada na seguinte forma:
ptr_var=(type_cast* ) malloc (size)
, Onde ptr_var
é o nome do ponteiro que mantém o endereço inicial do bloco de memória alocada, type_cast
é o tipo de dados em que o ponteiro retornado (ou tipo void) está a ser transformada, e o tamanho descreve o tamanho do bloco de memória alocada em bytes.
Por exemplo:int *ptr;
ptr=(int*) malloc (10 * size of (int));
Memória alocada pela função malloc contém o valor do lixo.
Note que para verificar se o pedido correspondente é gerado pelo malloc para alocar a memória concedida pela RAM do sistema, ou rejeitado (no caso de não haver espaço disponível). Nós podemos fazer uso da propriedade na qual a quantidade necessária de memória não é atribuída a função malloc retorna um NULL.
definição de calloc ()
a função calloc opera exatamente como a função malloc excluindo o fato de que ela requer dois argumentos como no caso de malloc() apenas um argumento é necessário.por exemplo::
ptr = (int*)calloc(10,2);
Aqui 2 especifica o tamanho do tipo de dados em um byte para o qual queremos que a alocação seja feita, que é este caso 2 para inteiros. E 10 significa o número de elementos para os quais a atribuição deve ser feita.
lembre-se que o argumento passado para a função malloc foi (n*10), é um único argumento não deve ser confundido porque vários argumentos são sempre separados por vírgulas. O argumento (n*10) não tem vírgulas no meio. Portanto, é um único argumento, embora não um simples, mas uma expressão.
Retornar para a declaração acima, após a execução da declaração acima é um bloco de memória de 20 bytes é alocado para o programa requerente e o endereço do primeiro bloco é atribuído para o programa solicitante, e o endereço do primeiro bloco é atribuído ao ponteiro ptr.
A memória atribuída pela função calloc contém todos os zeros. A função calloc também pode ser obtida no arquivo header <stdlib.h>
ou <alloc.h>
no TURBO C.
diferenças de chave entre malloc e calloc
As diferenças primárias entre as funções malloc e calloc são:
- um único bloco de memória exigida é atribuído em malloc enquanto vários blocos de memória solicitada são alocados pelo calloc.
- a função malloc não limpa e inicializa a memória alocada. Ele contém o valor do lixo e item da memória alocada não pode ser alterado. Em contraste, calloc inicializa a memória alocada para zero.
- malloc é mais rápido do que calloc devido à exigência de passos adicionais de inicialização no calloc, mas a diferença é negligenciável.
- outra diferença entre estes dois é que calloc é um malloc+memset, memset aloca as páginas físicas na memória enquanto malloc apenas atribui a memória do heap no endereço virtual.
conclusão
tanto as funções malloc e calloc são usadas para alocação da memória e têm a sua certa vantagem, e desvantagem como malloc é rápida em comparação com calloc. Além disso, malloc é mais fácil de usar, pois leva apenas um argumento, porque calloc aloca a memória e inicializa a área de memória com ZERO. Mas você prefere usar o calloc quando a inicialização de variáveis é mais importante para você.