Malloc () vs calloc (): Principais diferenças explicadas com exemplos

Índice:

Anonim

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#includeint 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.