Malloc () vs calloc (): Pagrindiniai skirtumai paaiškinti pavyzdžiais

Prieš sužinodami skirtumą tarp malloc ir calloc, mokykimės

Kas yra dinaminis atminties paskirstymas?

Dinaminis atminties paskirstymas yra atminties paskirstymo vykdymo metu procesas. Yra keturios bibliotekos tvarkos, calloc (), free (), realloc () ir malloc (), kurias galima naudoti atminčiai paskirstyti ir atlaisvinti programos vykdymo metu. Šios rutinos yra apibrėžtos antraštės faile, vadinamame stdlib.h.

Kas yra malloc ()?

Tai funkcija, naudojama dinamiškai paskirstyti atminties bloką. Tai rezervuoja nurodyto dydžio atminties vietą ir grąžina nulinį rodyklę, nukreipiančią į atminties vietą.

Grąžintas žymeklis paprastai yra tuščias. Tai reiškia, kad mes galime priskirti malloc funkciją bet kuriam žymekliui. Visa malloc forma yra atminties paskirstymas.

Šioje pamokoje sužinosite:

  • Kas yra dinaminis atminties paskirstymas?
  • Kas yra malloc ()?
  • Kas yra „calloc“ ()?
  • Kodėl naudoti malloc ()?
  • Kodėl verta naudoti „Calloc“ ()?
  • Malloko sintaksė ()
  • „Calloc“ () sintaksė
  • Malloc () pavyzdys C
  • Calloc () pavyzdys C
  • Skirtumas tarp calloc () ir malloc ()

Kas yra „calloc“ ()?

Funkcija Calloc () naudojama paskirstyti kelis atminties blokus. Tai yra dinaminė atminties paskirstymo funkcija, naudojama priskirti atmintį sudėtingoms duomenų struktūroms, tokioms kaip masyvai ir struktūros. Jei ši funkcija nepaskirs pakankamai vietos, kaip nurodyta, ji grąžins nulinį rodyklę. Pilna Calloc funkcijos forma yra gretimas paskirstymas.

Kodėl naudoti malloc ()?

Štai malloc () naudojimo priežastys

  • Turėtumėte naudoti malloc (), kai turite skirti atmintį vykdymo metu.
  • Turėtumėte naudoti malloc, kai turite priskirti objektus, kurie turi egzistuoti ne tik vykdant dabartinį atminties bloką.
  • Eikite į malloc (), jei jums reikia skirti atmintį, didesnę nei to kamino dydis.
  • Jis grąžina žymeklį į pirmąjį paskirtos vietos baitą.
  • Tai leidžia kūrėjams paskirstyti atmintį, kiek jos reikia tiksliai.
  • Ši funkcija priskiria atminties bloko dydį baitų iš kaupo.

Kodėl verta naudoti „Calloc“ ()?

Čia yra „Calloc“ () naudojimo priežastys

  • Kai turite nustatyti nulį skirtos atminties.
  • Norėdami naudotis atminties kaupu, galite naudoti „Calloc“, kuris grąžina žymeklį.
  • Naudojamas, kai reikia inicijuoti elementus iki nulio, kad grąžintumėte rodyklę į atmintį.
  • Norėdami išvengti perpildymo, kuris yra įmanomas naudojant malloc ()
  • Norėdami paprašyti puslapio, kuris, kaip žinoma, jau nulis, naudokite calloc ().

Malloko sintaksė ()

Čia yra malloco sintaksė ()

ptr = (cast_type *) malloc (byte_size);

Viršutinėje sintaksėje ptr yra „cast_type“ žymeklis. „Malloc“ funkcija grąžina žymeklį į paskirtą „byte_size“ atmintį.

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

Kai šis sakinys sėkmingai įvykdomas, rezervuojama 50 baitų atminties vieta. Pirmojo rezervuotos vietos baito adresas priskiriamas rodikliui „ptr“, kurio tipas yra int.

„Calloc“ () sintaksė

Čia yra malloco sintaksė ()

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

Pirmiau nurodyta sintaksė naudojama n vienodo dydžio atminties blokams priskirti. Paskyrus atminties vietą, visi baitai inicijuojami iki nulio. Grąžinamas žymeklis, kuris šiuo metu yra pirmame paskirtos atminties bate.

Malloc () pavyzdys C

Žemiau esančiame kode dydisof (* ptr) naudojamas 15 sveikų skaičių atminties blokui priskirti. „Printf“ sakinyje randame 6-ojo sveiko skaičiaus reikšmę.

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

Išvestis:

6-ojo sveiko skaičiaus reikšmė yra 480

Calloc () pavyzdys C

Žemiau esanti C kalbos programa apskaičiuoja pirmųjų dešimties terminų sumą. Jei rodyklės vertė yra nulinė, atminties vieta nebus skirta.

Dėl ciklo naudojamas pakartoti kintamojo „i“ vertę ir išspausdinti sumą. Galiausiai, funkcija be funkcijų naudojama atlaisvinant žymeklį.

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

Išvestis:

Pirmųjų 10 terminų sekos sumos sudarymas ir apskaičiavimas n Sum = 45

Skirtumas tarp calloc () ir malloc ()

Herer yra svarbus skirtumas tarp malloc () ir calloc ():

malloc () calloc ()
„Malloc“ () funkcija sukurs vieną vartotojo nurodyto dydžio atminties bloką. Funkcija Calloc () gali priskirti kelis atminties blokus kintamajam.
„Malloc“ funkcijoje yra šiukšlių vertė. Atminties blokas, priskirtas calloc funkcijai, visada inicijuojamas iki nulio.
Argumentų skaičius yra 2. Argumentų skaičius yra 1.
Calloc yra lėtesnis nei malloc. Malloc yra greitesnis nei calloc.
Tai nėra saugu, lyginant su Calloc. Tai saugu naudoti, palyginti su malloc.
Laiko efektyvumas yra didesnis nei calloc (). Laiko efektyvumas yra mažesnis nei malloc ().
Funkcija „Malloc“ () grąžina tik pradinį adresą ir nedaro jo nulio. Prieš paskiriant adresą, funkcija Calloc () grąžina pradinį adresą ir padaro jį nulį.
Jis neatlieka atminties inicializavimo. Tai atlieka atminties inicijavimą.

PAGRINDINIAI SKIRTUMAI:

  • funkcija malloc () grąžina tik pradinį adresą ir nepadaro jo nuline, kita vertus, funkcija calloc () grąžina pradinį adresą ir padaro nulį.
  • Malloc funkcijoje argumentų skaičius yra 2, o calloc funkcijose - 1.
  • laikooc () laiko efektyvumas yra didesnis nei calloc (), o malloc () nėra saugus, palyginti su calloc ()
  • malloc neinicijuoja atminties, o calloc atlieka atminties inicijavimą.

Įdomios straipsniai...