Malloc () vs calloc (): Kľúčové rozdiely vysvetlené v príkladoch

Obsah:

Anonim

Skôr ako sa naučíme rozdiel medzi mallocom a callocom, naučme sa

Čo je dynamické prideľovanie pamäte?

Dynamické prideľovanie pamäte je proces prideľovania pamäte za behu programu. Existujú štyri knižničné rutiny, calloc (), free (), realloc () a malloc (), ktoré možno použiť na pridelenie pamäte a jej uvoľnenie počas vykonávania programu. Tieto rutiny sú definované v hlavičkovom súbore s názvom stdlib.h.

Čo je malloc ()?

Je to funkcia, ktorá sa používa na dynamické pridelenie bloku pamäte. Vyhradzuje si pamäťový priestor určenej veľkosti a vracia nulový ukazovateľ smerujúci na miesto v pamäti.

Vrátený ukazovateľ je zvyčajne typu void. To znamená, že môžeme priradiť funkciu malloc každému ukazovateľu. Plnou formou malloc je alokácia pamäte.

V tomto návode sa dozviete:

  • Čo je dynamické prideľovanie pamäte?
  • Čo je malloc ()?
  • Čo je calloc ()?
  • Prečo používať malloc ()?
  • Prečo používať calloc ()?
  • Syntax malloc ()
  • Syntax calloc ()
  • Príklad malloc () v C
  • Príklad calloc () v C
  • Rozdiel medzi calloc () a malloc ()

Čo je calloc ()?

Funkcia Calloc () sa používa na pridelenie viacerých blokov pamäte. Jedná sa o funkciu dynamického prideľovania pamäte, ktorá sa používa na pridelenie pamäte zložitým dátovým štruktúram, ako sú polia a štruktúry. Ak táto funkcia nedokáže alokovať dostatok miesta, ako je určené, vráti ukazovateľ nulový. Plnou formou funkcie calloc je súvislé pridelenie.

Prečo používať malloc ()?

Tu sú dôvody použitia malloc ()

  • Mali by ste použiť malloc (), keď musíte alokovať pamäť za behu.
  • Malloc by ste mali použiť, keď musíte alokovať objekty, ktoré musia existovať po vykonaní aktuálneho pamäťového bloku.
  • Ak potrebujete alokovať pamäť väčšiu ako veľkosť tohto stohu, choďte na malloc ().
  • Vráti ukazovateľ na prvý bajt prideleného priestoru.
  • Umožňuje vývojárom alokovať pamäť podľa potreby v presnom množstve.
  • Táto funkcia alokuje veľkosť bloku pamäte bajtov z haldy.

Prečo používať calloc ()?

Tu sú dôvody použitia calloc ()

  • Keď musíte pridelenú pamäť nastaviť na nulu.
  • Na získanie prístupu k halde pamäte môžete použiť calloc, ktorý vráti ukazovateľ.
  • Používa sa, keď potrebujete inicializovať prvky na nulu, aby sa vrátil ukazovateľ do pamäte.
  • Aby sa zabránilo pretečeniu, ktoré je možné s malloc ()
  • Použite calloc () na vyžiadanie stránky, o ktorej je známe, že už bola vynulovaná.

Syntax malloc ()

Tu je syntax malloc ()

ptr = (cast_type *) malloc (byte_size);

Vo vyššie uvedenej syntaxi je ptr ukazovateľ typu cast_type. Funkcia malloc vráti ukazovateľ na pridelenú pamäť byte_size.

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

Po úspešnom vykonaní tohto príkazu je vyhradený pamäťový priestor 50 bajtov. Adresa prvého bajtu vyhradeného priestoru sa priradí ukazovateľu "ptr" typu int.

Syntax calloc ()

Tu je syntax malloc ()

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

Vyššie uvedená syntax sa používa na pridelenie n pamäťových blokov rovnakej veľkosti. Po pridelení pamäťového priestoru sa všetky bajty inicializujú na nulu. Ukazovateľ, ktorý je momentálne na prvom bajte prideleného pamäťového priestoru, sa vráti.

Príklad malloc () v C

V nasledujúcom kóde sa sizeof (* ptr) používa na pridelenie pamäťového bloku 15 celých čísel. Vo vyhlásení printf nájdeme hodnotu 6. celého čísla.

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

Výkon:

Hodnota šiesteho celého čísla je 480

Príklad calloc () v C

Program v jazyku C uvedený nižšie počíta súčet prvých desiatich volebných období. Ak je hodnota ukazovateľa nulová, potom sa pamäťový priestor nepridelí.

Smyčka For sa používa na iteráciu hodnoty premennej „i“ a vytlačenie súčtu. Nakoniec sa funkcia free používa na uvoľnenie ukazovateľ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;}

Výkon:

Vytvorenie a výpočet postupného súčtu prvých 10 výrazov n Súčet = 45

Rozdiel medzi calloc () a malloc ()

Nasleduje dôležitý rozdiel medzi malloc () a calloc ():

malloc () calloc ()
Funkcia Malloc () vytvorí jeden blok pamäte veľkosti určenej používateľom. Funkcia Calloc () môže premennej priradiť viac blokov pamäte.
Funkcia Malloc obsahuje smetnú hodnotu. Blok pamäte pridelený funkciou calloc je vždy inicializovaný na nulu.
Počet argumentov je 2. Počet argumentov je 1.
Calloc je pomalší ako malloc. Malloc je rýchlejší ako calloc.
Nie je to bezpečné v porovnaní s callocom. Jeho použitie je bezpečné v porovnaní s mallocom.
Časová efektívnosť je vyššia ako calloc (). Časová účinnosť je nižšia ako malloc ().
Funkcia Malloc () vracia iba začiatočnú adresu a nerobí ju nulovou. Pred pridelením adresy funkcia Calloc () vráti počiatočnú adresu a vynuluje ju.
Nevykonáva inicializáciu pamäte. Vykonáva inicializáciu pamäte.

KĽÚČOVÉ ROZDIELY:

  • funkcia malloc () vráti iba začiatočnú adresu a na druhej strane ju nezruší, funkcia calloc () vráti počiatočnú adresu a vynuluje ju.
  • Vo funkcii malloc je počet argumentov 2, zatiaľ čo vo funkcii calloc je počet argumentov 1.
  • malloc () časová účinnosť je vyššia ako calloc (), zatiaľ čo malloc () nie je bezpečný v porovnaní s calloc ()
  • malloc neinicializuje pamäť, zatiaľ čo calloc vykonáva inicializáciu pamäte.