Malloc () vs calloc (): Ključne razlike so pojasnjene s primeri

Kazalo:

Anonim

Preden se naučimo razlike med malloc in calloc, se naučimo-

Kaj je dinamično dodeljevanje pomnilnika?

Dinamično dodeljevanje pomnilnika je postopek dodeljevanja pomnilnika med izvajanjem. Obstajajo štiri rutine knjižnic, calloc (), free (), realloc () in malloc (), s katerimi lahko dodelite pomnilnik in ga sprostite med izvajanjem programa. Te rutine so definirane v datoteki glave, imenovani stdlib.h.

Kaj je malloc ()?

To je funkcija, ki se uporablja za dinamično dodeljevanje bloka pomnilnika. Pridržuje pomnilniški prostor določene velikosti in vrne ničelni kazalec, ki kaže na mesto pomnilnika.

Vrnjeni kazalec je običajno tipa void. To pomeni, da lahko kateremu koli kazalcu dodelimo funkcijo malloc. Celotna oblika malloca je dodeljevanje pomnilnika.

V tej vadnici boste izvedeli:

  • Kaj je dinamično dodeljevanje pomnilnika?
  • Kaj je malloc ()?
  • Kaj je calloc ()?
  • Zakaj uporabljati malloc ()?
  • Zakaj uporabljati calloc ()?
  • Sintaksa malloc ()
  • Sintaksa calloc ()
  • Primer malloc () v jeziku C
  • Primer calloc () v C
  • Razlika med calloc () in malloc ()

Kaj je calloc ()?

Funkcija Calloc () se uporablja za dodelitev več blokov pomnilnika. Gre za funkcijo dinamičnega dodeljevanja pomnilnika, ki se uporablja za dodelitev pomnilnika kompleksnim podatkovnim strukturam, kot so nizi in strukture. Če tej funkciji ne uspe dodeliti dovolj prostora, kot je določeno, bo vrnila ničelni kazalec. Celotna oblika funkcije žulja je sosednja dodelitev.

Zakaj uporabljati malloc ()?

Tu so razlogi za uporabo malloc ()

  • Če želite dodeliti pomnilnik med izvajanjem, uporabite malloc ().
  • Malloc uporabite, kadar morate dodeliti predmete, ki morajo obstajati dlje od izvajanja trenutnega pomnilniškega bloka.
  • Pojdite na malloc (), če želite dodeliti pomnilnik, večji od velikosti tega sklada.
  • Vrne kazalec na prvi bajt dodeljenega prostora.
  • Razvijalcem omogoča natančno dodelitev pomnilnika, kolikor je potrebnega.
  • Ta funkcija iz kupa dodeli velikost bajtov pomnilniškega bloka.

Zakaj uporabljati calloc ()?

Tukaj so razlogi za uporabo calloc ()

  • Ko morate dodeljeni pomnilnik nastaviti na nič.
  • Za dostop do kopice pomnilnika lahko uporabite calloc, ki vrne kazalec.
  • Uporablja se, ko morate elemente inicializirati na nič, da vrne kazalec v pomnilnik.
  • Da bi preprečili prelivanje, ki je možno z malloc ()
  • Uporabite calloc (), da zahtevate stran, za katero je znano, da je že nič.

Sintaksa malloc ()

Tu je sintaksa malloc ()

ptr = (cast_type *) malloc (byte_size);

V zgornji sintaksi je ptr kazalec vrste cast_type. Funkcija malloc vrne kazalec na dodeljeni pomnilnik byte_size.

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

Ko je ta stavek uspešno izveden, je rezerviran pomnilniški prostor 50 bajtov. Naslov prvega bajta rezerviranega prostora je dodeljen kazalcu "ptr" tipa int.

Sintaksa calloc ()

Tu je sintaksa malloc ()

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

Zgornja sintaksa se uporablja za dodelitev n pomnilniških blokov enake velikosti. Po dodelitvi pomnilniškega prostora se vsi bajti inicializirajo na nič. Vrnjen je kazalec, ki je trenutno v prvem bajtu dodeljenega pomnilniškega prostora.

Primer malloc () v jeziku C

V spodnji kodi se sizeof (* ptr) uporablja za dodelitev pomnilniškega bloka 15 celih števil. V stavku printf najdemo vrednost šestega števila.

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

Izhod:

Vrednost šestega števila je 480

Primer calloc () v C

Spodnji program za jezik C izračuna vsoto prvih desetih izrazov. Če je vrednost kazalca nič, potem pomnilniški prostor ne bo dodeljen.

Zanka for se uporablja za ponavljanje vrednosti spremenljivke "i" in izpis vsote. Nazadnje, funkcija free se uporablja za sprostitev kazalca.

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

Izhod:

Sestavljanje in izračun vsote zaporedja prvih 10 izrazov n Vsota = 45

Razlika med calloc () in malloc ()

Tu so pomembne razlike med malloc () in calloc ():

malloc () calloc ()
Funkcija Malloc () bo ustvarila en blok pomnilnika, ki ga določi uporabnik. Funkcija Calloc () lahko za spremenljivko dodeli več blokov pomnilnika.
Funkcija Malloc vsebuje vrednost smeti. Pomnilniški blok, ki ga dodeli funkcija calloc, se vedno inicializira na nič.
Število argumentov je 2. Število argumentov je 1.
Calloc je počasnejši od malloca. Malloc je hitrejši od calloc.
Ni varno kot v primerjavi z calloc. Je varna za uporabo v primerjavi z malloc.
Časovna učinkovitost je večja od calloc (). Časovna učinkovitost je manjša od malloc ().
Funkcija Malloc () vrne samo začetni naslov in ga ne spremeni v nič. Pred dodelitvijo naslova funkcija Calloc () vrne začetni naslov in ga spremeni v nič.
Ne izvaja inicializacije pomnilnika. Opravlja inicializacijo pomnilnika.

KLJUČNE RAZLIKE:

  • funkcija malloc () vrne samo začetni naslov in po drugi strani ne pomeni nič, funkcija calloc () vrne začetni naslov in ga postavi na nič.
  • V funkciji malloc je število argumentov 2, medtem ko je v funkciji calloc število argumentov 1.
  • časovna učinkovitost malloc () je večja od calloc (), medtem ko malloc () ni varna v primerjavi z calloc ()
  • malloc ne inicializira pomnilnika, medtem ko calloc izvede inicializacijo pomnilnika.