Malloc () vs calloc (): Ključne razlike objašnjene na primjerima

Sadržaj:

Anonim

Prije nego što naučimo razliku između malloca i calloca, naučimo-

Što je dinamičko dodjeljivanje memorije?

Dinamičko dodjeljivanje memorije je postupak dodjeljivanja memorije u vrijeme izvođenja. Postoje četiri rutine knjižnica, calloc (), free (), realloc () i malloc () koje se mogu koristiti za alokaciju i oslobađanje memorije tijekom izvršavanja programa. Te su rutine definirane u zaglavnoj datoteci zvanoj stdlib.h.

Što je malloc ()?

To je funkcija koja se koristi za dinamičko dodjeljivanje bloka memorije. Rezervira memorijski prostor određene veličine i vraća null pokazivač koji pokazuje na memorijsko mjesto.

Vraćeni pokazivač obično je tipa void. To znači da bilo kojem pokazivaču možemo dodijeliti funkciju malloc. Puni oblik malloca je dodjela memorije.

U ovom vodiču naučit ćete:

  • Što je dinamičko dodjeljivanje memorije?
  • Što je malloc ()?
  • Što je calloc ()?
  • Zašto koristiti malloc ()?
  • Zašto koristiti calloc ()?
  • Sintaksa malloc ()
  • Sintaksa calloc ()
  • Primjer malloc () u C
  • Primjer calloc () u C
  • Razlika između calloc () i malloc ()

Što je calloc ()?

Funkcija Calloc () koristi se za dodjelu više blokova memorije. To je funkcija dinamičke dodjele memorije koja se koristi za dodjelu memorije složenim strukturama podataka kao što su nizovi i strukture. Ako ova funkcija ne dodijeli dovoljno prostora kako je navedeno, vraća null pokazivač. Puni oblik funkcije žuljeva je susjedna alokacija.

Zašto koristiti malloc ()?

Evo razloga za upotrebu malloc ()

  • Trebali biste koristiti malloc () kada morate dodijeliti memoriju u vrijeme izvođenja.
  • Malloc biste trebali koristiti kada morate dodijeliti objekte koji moraju postojati izvan izvršenja trenutnog memorijskog bloka.
  • Idite na malloc () ako trebate dodijeliti memoriju veću od veličine tog stoga.
  • Vraća pokazivač na prvi bajt dodijeljenog prostora.
  • Omogućuje programerima da dodijele memoriju po potrebi u točnoj količini.
  • Ova funkcija iz gomile dodjeljuje veličinu bajtova memorijskog bloka.

Zašto koristiti calloc ()?

Evo razloga za upotrebu calloc ()

  • Kada dodijeljenu memoriju morate postaviti na nulu.
  • Možete koristiti calloc koji vraća pokazivač da biste dobili pristup hrpi memorije.
  • Koristi se kada elemente trebate inicijalizirati na nulu da biste vratili pokazivač u memoriju.
  • Da biste spriječili prelijevanje koje je moguće pomoću malloc ()
  • Upotrijebite calloc () da biste zatražili stranicu za koju se zna da je već postavljena na nulu.

Sintaksa malloc ()

Evo sintakse malloc ()

ptr = (cast_type *) malloc (byte_size);

U gornjoj sintaksi, ptr je pokazivač na cast_type. Funkcija malloc vraća pokazivač na dodijeljenu memoriju byte_size.

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

Kada se ovaj izraz uspješno izvrši, rezerviran je memorijski prostor od 50 bajtova. Adresa prvog bajta rezerviranog prostora dodjeljuje se pokazivaču "ptr" tipa int.

Sintaksa calloc ()

Evo sintakse malloc ()

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

Gornja sintaksa koristi se za dodjelu n memorijskih blokova iste veličine. Nakon dodjele memorijskog prostora, svi su bajtovi inicijalizirani na nulu. Vraćen je pokazivač koji je trenutno u prvom bajtu dodijeljenog prostora memorije.

Primjer malloc () u C

U donjem kodu sizeof (* ptr) koristi se za dodjelu memorijskog bloka od 15 cijelih brojeva. U iskazu printf nalazimo vrijednost 6. cijelog broja.

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

Izlaz:

Vrijednost 6. cijelog broja je 480

Primjer calloc () u C

Program za jezik C u nastavku izračunava zbroj prvih deset pojmova. Ako je vrijednost pokazivača null, prostor memorije neće biti dodijeljen.

Petlja for koristi se za ponavljanje vrijednosti varijable "i" i ispis zbroja. I na kraju, funkcija free koristi se za oslobađanje pokazivača.

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

Izlaz:

Izgradnja i izračunavanje zbroja redoslijeda prvih 10 članova n Zbroj = 45

Razlika između calloc () i malloc ()

Ovdje su važne razlike između malloc () i calloc ():

malloc () kalok ()
Funkcija Malloc () stvorit će jedan blok memorije veličine koju je odredio korisnik. Funkcija Calloc () može dodijeliti više blokova memorije za varijablu.
Malloc funkcija sadrži vrijednost smeća. Memorijski blok dodijeljen funkcijom calloc uvijek se inicijalizira na nulu.
Broj argumenata je 2. Broj argumenata je 1.
Calloc je sporiji od malloca. Malloc je brži od calloca.
Nije siguran kao u usporedbi s calloc. Siguran je za upotrebu u usporedbi s mallocom.
Vremenska učinkovitost veća je od calloc (). Vremenska učinkovitost niža je od malloc ().
Funkcija Malloc () vraća samo početnu adresu i ne čini je nulom. Prije dodjeljivanja adrese, funkcija Calloc () vraća početnu adresu i poništava je.
Ne izvršava inicijalizaciju memorije. Izvodi inicijalizaciju memorije.

KLJUČNE RAZLIKE:

  • funkcija malloc () vraća samo početnu adresu i ne čini je nulom s druge strane, funkcija calloc () vraća početnu adresu i čini je nulom.
  • U funkciji malloc broj argumenata je 2, dok je u funkciji calloc broj argumenata 1.
  • vremenska učinkovitost malloc () veća je od calloc () dok malloc () nije siguran u usporedbi s calloc ()
  • malloc ne inicijalizira memoriju, dok calloc vrši inicijalizaciju memorije.