Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

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 é 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()

Por que usar calloc() ?


Aqui estão as razões de usar calloc()

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:


Linguagem C

  1. Expressões, instruções e blocos em C# (com exemplos)
  2. C++ do… while loop com exemplos
  3. Ponteiros C++ com exemplos
  4. Tipo de dados C++ Char com exemplos
  5. Sobrecarga do operador C++ com exemplos
  6. Funções C++ com exemplos de programas
  7. Tutorial de coleções de C# com exemplos
  8. Diferença entre while e do-while:explicado com exemplos
  9. Função calloc() na biblioteca C com o programa EXEMPLO
  10. Python String count() com EXEMPLOS