Diferența dintre malloc() și calloc()

Diferențele cheie între malloc() și calloc()

  • Funcția malloc() returnează doar adresa de pornire și nu o face zero, pe de altă parte, funcția calloc() returnează adresa de pornire și o face zero.
  • În funcția malloc, numărul de argumente este 1, în timp ce în funcția calloc, numărul de argumente este 2.
  • Eficiența timpului malloc() este mai mare decât calloc(), în timp ce malloc() nu este sigur în comparație cu calloc()
  • malloc nu inițializează memoria, în timp ce calloc efectuează inițializarea memoriei.
malloc() vs calloc()
malloc() vs calloc()

Ce este alocarea dinamică a memoriei?

Alocarea dinamică a memoriei este un proces de alocare a memoriei în timpul rulării. Există patru rutine de bibliotecă, calloc(), free(), realloc(), și malloc() care poate fi folosit pentru a aloca memorie și pentru a o elibera în timpul execuției programului. Aceste rutine sunt definite în fișierul antet numit stdlib.h.

Ce este malloc()?

Este o funcție care este utilizată pentru a aloca dinamic un bloc de memorie. Rezervă spațiu de memorie de dimensiunea specificată și returnează pointerul nul care indică locația de memorie.

Indicatorul returnat este de obicei de tip void. Înseamnă că putem atribui funcția malloc oricărui pointer. Forma completă de malloc este alocarea memoriei.

Ce este calloc()?

Funcția Calloc(). este folosit pentru a aloca mai multe blocuri de memorie. Este o funcție de alocare dinamică a memoriei care este utilizată pentru a aloca memoria unor structuri complexe de date, cum ar fi matrice și structuri. Dacă această funcție nu reușește să aloce suficient spațiu așa cum este specificat, returnează pointerul nul. Forma completă a funcției calloc este alocarea contiguă.

Diferența dintre malloc() și calloc()

Iată diferențele importante între malloc() și calloc():

malloc () calloc()
Funcția Malloc() va crea un singur bloc de memorie de dimensiunea specificată de utilizator. Funcția Calloc() poate aloca mai multe blocuri de memorie pentru o variabilă.
Funcția Malloc conține o valoare de gunoi. Blocul de memorie alocat de o funcție calloc este întotdeauna inițializat la zero.
Numărul de argument este 1. Numărul de argumente este 2.
Calloc este mai lent decât malloc. Malloc este mai rapid decât calloc.
Nu este sigur în comparație cu calloc. Este sigur de utilizat în comparație cu malloc.
Eficiența timpului este mai mare decât calloc(). Eficiența timpului este mai mică decât malloc().
Funcția Malloc() returnează doar adresa de pornire și nu o face zero. Înainte de a aloca adresa, funcția Calloc() returnează adresa de pornire și o face zero.
Nu efectuează inițializarea memoriei. Efectuează inițializarea memoriei.

Sintaxa lui malloc()

Iată o sintaxă a lui malloc()

ptr = (cast_type *) malloc (byte_size);

În sintaxa de mai sus, ptr este un pointer de tip_cast. Funcția malloc returnează un pointer către memoria alocată pentru byte_size.

Example: ptr = (int *) malloc (50)

Când această instrucțiune este executată cu succes, un spațiu de memorie de 50 de octeți este rezervat. Adresa primului octet al spațiului rezervat este atribuită pointerului „ptr” de tip int.

Sintaxa calloc()

Iată o sintaxă a lui malloc()

ptr = (cast_type *) calloc (n, size);

Sintaxa de mai sus este folosită pentru a aloca n blocuri de memorie de aceeași dimensiune. După ce spațiul de memorie este alocat, toți octeții sunt inițializați la zero. Indicatorul, care se află în prezent la primul octet al spațiului de memorie alocat, este returnat.

Exemplu de malloc() în C

În codul de mai jos, sizeof(*ptr) este folosit pentru a aloca un bloc de memorie de 15 numere întregi. În instrucțiunea printf, găsim valoarea celui de-al 6-lea întreg.

#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));
    }
}

ieșire:

Valoarea celui de-al 6-lea număr întreg este 480

Exemplu de calloc() în C

Programul în limbaj C de mai jos calculează suma primilor zece termeni. Dacă valoarea indicatorului este nulă, atunci spațiul de memorie nu va fi alocat.

Bucla For este folosită pentru a repeta valoarea unei variabile „i” și pentru a tipări suma. În cele din urmă, funcția free este folosită pentru a elibera indicatorul.

#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;
    }

ieșire:

Construirea și calcularea sumei secvenței primilor 10 termeni n Sum = 45

De ce să folosiți malloc()?

Iată motivele utilizării malloc()

  • Ar trebui să utilizați malloc() când trebuie să alocați memorie în timpul execuției.
  • Ar trebui să utilizați malloc atunci când trebuie să alocați obiecte care trebuie să existe dincolo de execuția blocului de memorie curent.
  • Alegeți malloc() dacă trebuie să alocați memorie mai mare decât dimensiunea stivei respective.
  • Acesta returnează indicatorul la primul octet al spațiului alocat.
  • Permite dezvoltatorilor să aloce memorie așa cum este necesară, în cantitatea exactă.
  • Această funcție alocă o dimensiune de bloc de memorie de octeți din heap.

De ce să folosiți calloc()?

Iată motivele utilizării calloc()

  • Când trebuie să setați memoria alocată la zero.
  • Puteți utiliza calloc care returnează un pointer pentru a obține acces la heap de memorie.
  • Folosit atunci când trebuie să inițializați elementele la zero pentru a returna un pointer în memorie.
  • Pentru a preveni overflow, care este posibil cu malloc()
  • Utilizați calloc() pentru a solicita o pagină despre care se știe că este deja pusă la zero.