Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi malloc a calloc

Základným rozdielom medzi funkciou malloc a calloc je, že calloc () potrebuje dva argumenty namiesto jedného argumentu, ktorý vyžaduje malloc () . Obaja malloc () a calloc () sú funkcie, ktoré C programovací jazyk poskytuje pri alokácii dynamickej pamäte a de-alokácii v čase spustenia.

Pred porozumením funkcií malloc () a calloc () najprv pochopíme význam dynamickej alokácie pamäte. Prideľovanie pamäte je postup prideľovania pamäte počítača na vykonávanie programov a procesov. Používame techniky dynamického prideľovania, keď nie je známe, aká veľká časť pamäťového priestoru je potrebná pre program a proces.

Dynamická alokácia pamäte vzniká v dôsledku problémov spojených so statickou alokáciou pamäte, napríklad ak je uložených menej prvkov, a zvyšok pamäte je zbytočne plytvaný. Preto prekonáva problémy pri prideľovaní statickej pamäte, kde je pamäť pridelená len vtedy, keď je to potrebné.

Porovnávacia tabuľka

Základy porovnaniamalloc ()calloc ()
Počet blokovPriraďuje jeden blok požadovanej pamäte.
Priraďuje viac blokov požadovanej pamäte.
syntaxvoid * malloc (veľkosť_t veľkosť);void * calloc (size_t num, veľkosť_t veľkosť);
inicializáciamalloc () neindexuje a inicializuje pridelenú pamäť.Pridelenú pamäť inicializuje na nulu pomocou calloc ().
Spôsob prideleniaFunkcia malloc () alokuje pamäť veľkosti "veľkosti" z haldy.funkcia calloc () prideľuje pamäť, ktorej veľkosť sa rovná veľkosti num *.
rýchlosťrýchlyPorovnateľne pomalé.

Definícia malloc ()

Funkcia malloc priradí blok bloku v bajtoch . Používateľ by mal explicitne uviesť veľkosť bloku, ktorú vyžaduje použitie.

Prostredníctvom programu funkcie malloc požaduje RAM systému prideľovania pamäte, ak je žiadosť pridelená (tj funkcia malloc hovorí úspešne pri alokovaní pamäte), vracia ukazovateľ do prvého bloku pamäte. Vracia neplatný typ ukazovateľa, čo znamená, že môže byť priradený akýkoľvek typ ukazovateľa.

Aj keď vracia hodnotu NULL, ak funkcie malloc nemôžu prideliť požadované množstvo pamäte. Funkcia malloc je prístupná v programe TURBO C, hlavičke file alloc.h alebo stdlib.h av systéme UNIX bude k dispozícii v hlavičkovom súbore ,

SYNTAX

Syntax tejto funkcie je nasledujúci:

malloc(number of elements * size of each element);

napríklad,
int *ptr;
ptr=malloc(10*sizeof (int))

Kde veľkosť predstavuje veľkosť pamäte vyžadovanú v bajtoch (tj počet priľahlých pamäťových miest, ktoré sa majú priradiť).

Ale ako sme už uviedli vyššie, funkcia malloc vráti prázdny ukazovateľ, následne musí operátor obsadenia zmeniť druh vráteného ukazovateľa na základe našej potreby, vyššie uvedené vyhlásenie by mohlo byť prezentované v nasledujúcej forme:

ptr_var=(type_cast* ) malloc (size)

Ak je ptr_var názov ukazovateľa, ktorý si zachováva počiatočnú adresu prideleného bloku pamäte, type_cast je dátový typ, do ktorého má byť transformovaný vrátený ukazovateľ (alebo typ void), a veľkosť popisuje veľkosť prideleného pamäťového bloku v bajtoch,

Napríklad:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Pamäť pridelená funkciou malloc obsahuje hodnotu odpadu .

Všimnite si, že na overenie, či je malloc vygenerovaný zodpovedajúci požadavek na pridelenie pamäte udelenej systémovou pamäťou RAM alebo odmietnutú (v prípade, že požadovaný priestor nie je k dispozícii). Môžeme využiť vlastnosť, v ktorej nie je priradené potrebné množstvo pamäte, funkcia malloc vráti hodnotu NULL.

Definícia calloc ()

Funkcia calloc funguje presne rovnako ako funkcia malloc, s výnimkou toho, že vyžaduje dva argumenty, ako v prípade malloc () je potrebný iba jeden argument.

Napríklad:
int*ptr;
ptr = (int*)calloc(10, 2);

Tu 2 určuje veľkosť dátového typu v bajte, pre ktorý chceme alokáciu vykonať, čo je v tomto prípade 2 pre celé čísla. A 10 označuje počet prvkov, pre ktoré má byť alokácia vykonaná.

Pamätajte, že argument prenesený na funkciu malloc bol (n * 10), je to jediný argument, ktorý sa nesmie zamieňať, pretože viaceré argumenty sú vždy oddelené čiarkami. Argument (n * 10) nemá medzi sebou čiarky. Preto je to jediný argument, hoci nie jednoduchý, ale výraz.

Po vrátení vyššie uvedeného vyhlásenia sa po vykonaní vyššie uvedeného vyhlásenia priradí blok pamäte s veľkosťou 20 bajtov žiadajúcemu programu a adresa prvého bloku je priradená žiadajúcemu programu a adresa prvého bloku je priradená ukazovateľovi ptr.

Pamäť pridelená funkciou calloc drží všetky nuly. Funkcia calloc sa dá získať aj v hlavičkovom súbore alebo v TURBO C.

Kľúčové rozdiely medzi malloc a calloc

Primárne rozdiely medzi funkciami malloc a calloc sú:

  1. Jeden blok požadovanej pamäte je priradený v malloc, zatiaľ čo viaceré bloky požadovanej pamäte sú alokované callocom.
  2. Funkcia malloc nevymaže a neinicializuje alokovanú pamäť. Obsahuje množstvo odpadu a položka alokovanej pamäte sa nedá zmeniť. Naproti tomu calloc inicializuje alokovanú pamäť na nulu.
  3. malloc je rýchlejšie ako calloc kvôli požiadavke ďalších krokov inicializácie v calloc, ale rozdiel je zanedbateľný.
  4. Ďalším rozdielom medzi týmito dvoma je, že calloc je malloc + memset, memset alokuje fyzické stránky do pamäte, zatiaľ čo malloc priradí pamäť z haldy do virtuálnej adresy.

záver:

Funkcie malloc a calloc sa používajú na prideľovanie pamäte a majú určitú výhodu a nevýhoda, ako je malloc, je rýchla v porovnaní s callocom. Navyše, malloc je jednoduchšie použiť, pretože vyžaduje iba jeden argument, pretože calloc alokuje pamäť a inicializuje oblasť pamäte pomocou ZERO. Ale radšej by ste použili calloc, keď je pre vás dôležitejšia inicializácia premenných .

Top