malloc() vs calloc():as principais diferenças explicadas com exemplos
Antes de aprender a diferença entre malloc e calloc, vamos aprender
O que é alocação dinâmica de memória?
A 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 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 chamado stdlib.h.
O que é malloc() ?
É uma função que é 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 é alocação de memória.
Neste tutorial, você aprenderá:
- O que é alocação dinâmica de memória?
- 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 não alocar espaço suficiente conforme especificado, ela retornará um ponteiro nulo. A forma completa da função calloc é alocação contígua.
Por que usar malloc() ?
Aqui estão as razões de 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 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 de usar calloc()
- Quando você precisa 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 com 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 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. Depois que o espaço de memória é alocado, 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, estamos encontrando 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º inteiro é 480
Exemplo de calloc() em C
O programa em linguagem C abaixo calcula a soma dos dez primeiros 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 fim, a função livre é 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 10 primeiros termos n Soma =45
Diferença entre calloc() e malloc()
Aqui estão as 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 um valor lixo. O bloco de memória alocado por uma função calloc é sempre inicializado para zero.Número de argumento é 1.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 de usar em comparação com malloc.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 torna zero.Não executa a inicialização de memória. Realiza a inicialização da memória.
DIFERENÇAS PRINCIPAIS:
- 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.
- malloc() eficiência de tempo é maior que calloc() enquanto 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.
Linguagem C
- Expressões, instruções e blocos em C# (com exemplos)
- C++ do… while loop com exemplos
- Ponteiros C++ com exemplos
- Tipo de dados C++ Char com exemplos
- Sobrecarga do operador C++ com exemplos
- Funções C++ com exemplos de programas
- Tutorial de coleções de C# com exemplos
- Diferença entre while e do-while:explicado com exemplos
- Função calloc() na biblioteca C com o programa EXEMPLO
- Python String count() com EXEMPLOS