Recomendado, 2024

Escolha Do Editor

Diferença entre malloc e calloc

A diferença fundamental entre a função malloc e calloc é que calloc () precisa de dois argumentos em vez de um argumento que é requerido por malloc () . Ambos malloc () e calloc () são as funções que a linguagem de programação C fornece para alocação de memória dinâmica e de-alocação em tempo de execução.

Antes de entender 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 designar a memória do computador para a execução de programas e processos. Usamos técnicas de alocação dinâmica quando não é conhecido antes quanto espaço de memória é necessário para o programa e processo.

A alocação de memória dinâmica surge devido aos problemas associados à alocação de memória estática, como se menos elementos fossem armazenados, e o restante da memória seria desnecessariamente desperdiçado. Portanto, ele supera os problemas de alocação de memória estática onde a memória é alocada somente quando é necessária.

Gráfico de comparação

Base de comparaçãomalloc ()calloc ()
Não de blocosAtribui um único bloco de memória exigida.
Atribui vários blocos da memória solicitada.
Sintaxevoid * malloc (size_t size);void * calloc (size_t num, size_t size);
Inicializaçãomalloc () não limpa e inicializa a memória alocada.A memória alocada é inicializada para zero usando calloc ().
Forma de AlocaçãoA função malloc () aloca memória do tamanho 'size' do heap.A função calloc () aloca memória cujo tamanho é igual a num * size.
RapidezRápidoComparativamente lento.

Definição de malloc ()

A função malloc atribui um bloco de memória em bytes . O usuário deve fornecer explicitamente o tamanho do bloco, requer para o uso.

Por meio do programa de função malloc solicita RAM do sistema para alocação da memória, caso a requisição seja concedida (ou seja, a função malloc diz sucesso na alocação de memória), retorna um ponteiro para o primeiro bloco de memória. Ele retorna o tipo de ponteiro vazio, o que significa que qualquer tipo de ponteiro pode ser atribuído.

Embora, ele retorne um NULL, se as funções malloc não puderem alocar a quantidade necessária de memória. A função malloc é acessível em TURBO C, arquivo de cabeçalho alloc.h ou stdlib.h, e no UNIX estará disponível no arquivo de cabeçalho .

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 size representa o tamanho da memória requerida em bytes (isto é, o número de localizações de memória contíguas a serem alocadas).

Mas, como mencionado anteriormente, a função malloc retorna um ponteiro vazio, consequentemente, um operador de elenco é necessário para alterar o tipo de ponteiro retornado com base em nossa necessidade, a declaração acima pode ser apresentada da seguinte forma:

ptr_var=(type_cast* ) malloc (size)

Onde ptr_var é o nome do ponteiro que retém o endereço inicial do bloco de memória alocada, type_cast é o tipo de dados no qual o ponteiro retornado (ou tipo void) deve ser transformado, e size descreve o tamanho do bloco de memória alocado em bytes .

Por exemplo:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Memória alocada pela função malloc contém valor de lixo .

Observe que para verificar se o pedido correspondente é gerado pelo malloc para alocar a memória concedida pela RAM do sistema ou rejeitado (no caso, se o espaço necessário não estiver disponível). Podemos fazer uso da propriedade na qual a quantidade necessária de memória não é atribuída à função malloc retorna um NULL.

Definição de calloc ()

A função calloc opera exatamente da mesma forma que a função malloc excluindo o fato de que requer dois argumentos, como no caso de malloc (), apenas um argumento é necessário.

Por exemplo:
int*ptr;
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 neste caso é 2 para inteiros. E 10 significam o número de elementos para os quais a alocação deve ser feita.

Lembre-se que o argumento passado para a função malloc era (n * 10), é um argumento único não se confunda porque vários argumentos são sempre separados por vírgulas. O argumento (n * 10) não tem vírgulas entre elas. Por isso, é um único argumento, embora não seja um simples, mas uma expressão.

Voltando à declaração acima, após a execução da declaração acima, um bloco de memória de 20 bytes é alocado para o programa solicitante e o endereço do primeiro bloco é atribuído ao programa solicitante, e o endereço do primeiro bloco é atribuído ao ponteiro ptr.

A memória alocada pela função calloc retém todos os zeros. A função calloc também pode ser obtida no arquivo de cabeçalho ou em TURBO C.

Principais diferenças entre malloc e calloc

As principais diferenças entre as funções malloc e calloc são:

  1. Um único bloco de memória exigida é atribuído em malloc enquanto vários blocos de memória solicitada são alocados por calloc.
  2. A função malloc não limpa e inicializa a memória alocada. Ele contém valor de lixo e item da memória alocada não pode ser alterado. Em contraste, calloc inicializa a memória alocada para zero.
  3. O malloc é mais rápido que o calloc devido ao requisito de etapas adicionais de inicialização no calloc, mas a diferença é insignificante.
  4. Outra diferença entre esses dois é que calloc é um malloc + memset, memset aloca as páginas físicas na memória enquanto malloc atribui apenas a memória do heap no endereço virtual.

Conclusão:

As funções malloc e calloc são usadas para alocação da memória e têm sua certa vantagem, e a 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 o calloc aloca memória e inicializa a área de memória com ZERO. Mas você preferiria usar o calloc quando a inicialização da variável for mais importante para você.

Top