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.
