Diferença entre malloc() e calloc()
Principais diferenças entre malloc() e calloc()
- A função malloc() retorna apenas o endereço inicial e não o torna zero, por outro lado, a função calloc() retorna o endereço inicial e o torna zero.
- Na função malloc, o número de argumentos é 1, enquanto na função calloc, o número de argumentos é 2.
- A eficiência de tempo de malloc() é maior que calloc(), enquanto malloc() não é seguro em comparação com calloc()
- malloc não inicializa a memória, enquanto calloc executa a inicialização da memória.

O que é alocação dinâmica de memória?
Alocação dinâmica de memória é um processo de alocação de memória em tempo de execução. Existem quatro rotinas de biblioteca, calloc(), free(), realloc ()e malloc() que pode ser usado para alocar memória e liberá-la durante a execução do programa. Essas rotinas são definidas no arquivo de cabeçalho denominado stdlib.h.
O que é malloc()?
É uma função usada para alocar um bloco de memória dinamicamente. Ele reserva espaço de memória de tamanho especificado e retorna o ponteiro nulo apontando para o local da memória.
O ponteiro retornado geralmente é do tipo void. Isso significa que podemos atribuir a função malloc a qualquer ponteiro. A forma completa de malloc é a alocação de memória.
O que é calloc()?
Função Calloc() é usado para alocar vários blocos de memória. É uma função de alocação dinâmica de memória que é usada para alocar memória para estruturas de dados complexas, como arrays e estruturas. Se esta função não conseguir alocar espaço suficiente conforme especificado, ela retornará um ponteiro nulo. A forma completa da função calloc é a alocação contígua.
Diferença entre malloc() e calloc()
Aqui estão diferenças importantes entre malloc() e calloc():
malloc () | calloc () |
---|---|
A função Malloc() criará um único bloco de memória de tamanho especificado pelo usuário. | A função Calloc() pode atribuir vários blocos de memória para uma variável. |
A função Malloc contém valor lixo. | O bloco de memória alocado por uma função calloc é sempre inicializado em zero. |
O número do argumento é 1. | O número de argumentos é 2. |
Calloc é mais lento que malloc. | Malloc é mais rápido que calloc. |
Não é seguro em comparação com calloc. | É seguro usar em comparação com malloc. |
A eficiência de tempo é maior que calloc(). | A eficiência de tempo é menor que malloc(). |
A função Malloc() retorna apenas o endereço inicial e não o torna zero. | Antes de alocar o endereço, a função Calloc() retorna o endereço inicial e o zera. |
Não executa inicialização de memória. | Ele executa a inicialização da memória. |
Sintaxe de malloc()
Aqui está uma sintaxe de malloc()
ptr = (cast_type *) malloc (byte_size);
Na sintaxe acima, ptr é um ponteiro para cast_type. A função malloc retorna um ponteiro para a memória alocada de byte_size.
Example: ptr = (int *) malloc (50)
Quando esta instrução é executada com sucesso, um espaço de memória de 50 bytes é reservado. O endereço do primeiro byte do espaço reservado é atribuído ao ponteiro “ptr” do tipo int.
Sintaxe de calloc()
Aqui está uma sintaxe de malloc()
ptr = (cast_type *) calloc (n, size);
A sintaxe acima é usada para alocar n blocos de memória do mesmo tamanho. Após a alocação do espaço de memória, todos os bytes são inicializados em zero. O ponteiro que está atualmente no primeiro byte do espaço de memória alocado é retornado.
Exemplo de malloc() em C
No código abaixo, sizeof(*ptr) é usado para alocar um bloco de memória de 15 inteiros. Na instrução printf, encontramos o valor do 6º inteiro.
#include<stdlib.h> #include<stdio.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); if (ptr != NULL) { *(ptr + 5) = 480; printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Saída:
O valor do 6º número inteiro é 480
Exemplo de calloc() em C
O programa em linguagem C abaixo calcula a soma dos primeiros dez termos. Se o valor do ponteiro for nulo, o espaço de memória não será alocado.
O loop For é usado para iterar o valor de uma variável “i” e imprimir a soma. Por último, a função free é usada para liberar o ponteiro.
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = calloc(10, sizeof(int)); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } printf("Building and calculating the sequence sum of the first 10 terms \n"); for (i = 0; i < 10; ++i) { * (ptr + i) = i; sum += * (ptr + i); } printf("Sum = %d", sum); free(ptr); return 0; }
Saída:
Construindo e calculando a soma sequencial dos primeiros 10 termos n Soma = 45
Por que usar malloc()?
Aqui estão as razões para usar malloc()
- Você deve usar malloc() quando precisar alocar memória em tempo de execução.
- Você deve usar malloc quando precisar alocar objetos que devem existir além da execução do bloco de memória atual.
- Vá para malloc() se precisar alocar memória maior que o tamanho dessa pilha.
- Ele retorna o ponteiro para o primeiro byte do espaço alocado.
- Ele permite que os desenvolvedores aloquem memória conforme necessário e na quantidade exata.
- Esta função aloca um tamanho de bloco de memória de bytes do heap.
Por que usar calloc()?
Aqui estão as razões para usar calloc()
- Quando você precisa definir a memória alocada como zero.
- Você pode usar calloc que retorna um ponteiro para obter acesso ao heap de memória.
- Usado quando você precisa inicializar os elementos em zero para retornar um ponteiro para a memória.
- Para evitar overflow que é possível com malloc()
- Use calloc() para solicitar uma página que já está zerada.