Antes de aprender a diferença entre malloc e calloc vamos aprender-
O que é alocação de memória dinâmica?
A alocação de memória dinâmica é um processo de alocação de memória em tempo de execução. Existem quatro rotinas de biblioteca, calloc (), free (), realloc () e malloc () que podem ser usadas 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 do 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.
Neste tutorial, você aprenderá:
- O que é alocação de memória dinâmica?
- O que é malloc ()?
- O que é calloc ()?
- Por que usar malloc ()?
- Por que usar calloc ()?
- Sintaxe de malloc ()
- Sintaxe de calloc ()
- Exemplo de malloc () em C
- Exemplo de calloc () em C
- Diferença entre calloc () e malloc ()
O que é calloc ()?
A função Calloc () é usada para alocar vários blocos de memória. É uma função de alocação de memória dinâmica que é usada para alocar a memória para estruturas de dados complexas, como matrizes e estruturas. Se esta função falhar em alocar espaço suficiente conforme especificado, ela retornará um ponteiro nulo. A forma completa da função calloc é a alocação contígua.
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 tiver que alocar objetos que devem existir além da execução do bloco de memória atual.
- Use malloc () se precisar alocar memória maior que o tamanho dessa pilha.
- Ele retorna o ponteiro para o primeiro byte de espaço alocado.
- Ele permite que os desenvolvedores aloquem a memória necessária 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ê tem que definir a memória alocada para zero.
- Você pode usar calloc que retorna um ponteiro para obter acesso ao heap de memória.
- Usado quando você precisa inicializar os elementos para zero para retornar um ponteiro para a memória.
- Para evitar o estouro que é possível com malloc ()
- Use calloc () para solicitar uma página que já foi zerada.
Sintaxe de malloc ()
Aqui está uma sintaxe de malloc ()
ptr = (cast_type *) malloc (byte_size);
Na sintaxe acima, ptr é um ponteiro de 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 de 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. Depois que o espaço de memória é alocado, todos os bytes são inicializados para 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, estamos encontrando o valor do 6º inteiro.
#include#include 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));}}
Resultado:
O valor do 6º inteiro é 480
Exemplo de calloc () em C
O programa de 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#include 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;}
Resultado:
Construindo e calculando a soma da sequência dos primeiros 10 termos n Soma = 45
Diferença entre calloc () e malloc ()
Herer são diferenças importantes entre malloc () e calloc ():
malloc () | calloc () |
A função Malloc () criará um único bloco de memória do 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 de lixo. | O bloco de memória alocado por uma função calloc é sempre inicializado em zero. |
O número de argumentos é 2. | O número do argumento é 1. |
Calloc é mais lento que malloc. | Malloc é mais rápido do que calloc. |
Não é seguro quando comparado ao calloc. | É seguro de usar em comparação com o malloc. |
A eficiência de tempo é maior do que calloc (). | A eficiência de tempo é menor do 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 torna zero. |
Não executa inicializações de memória. | Ele executa a inicialização da memória. |
PRINCIPAIS DIFERENÇAS:
- 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 é 2, enquanto na função calloc, o número de argumentos é 1.
- a eficiência de tempo de malloc () é maior do que calloc (), enquanto que malloc () não é seguro em comparação com calloc ()
- malloc não inicializa a memória, enquanto o calloc executa a inicialização da memória.