Preporučeno, 2020

Izbor Urednika

Razlika između malloc i calloc

Temeljna razlika između malloc i calloc funkcije je ta da calloc () treba dva argumenta umjesto jednog argumenta koji je potreban malloc () . Oba malloc () i calloc () su funkcije koje programski jezik C osigurava dinamičku dodjelu memorije i de-dodjeljivanje u vrijeme izvođenja.

Prije razumijevanja malloc () i calloc () funkcija prvo ćemo razumjeti značenje dinamičke dodjele memorije. Dodjela memorije je postupak dodjeljivanja memorije računala za izvršavanje programa i procesa. Koristimo tehnike dinamičke alokacije kada nije poznato prije koliko je memorijskog prostora potrebno za program i proces.

Dinamička dodjela memorije nastaje zbog problema povezanih s dodjelom statičke memorije, kao što je, ako je pohranjeno manje elemenata, onda se ostatak memorije nepotrebno troši. Stoga, on prevladava probleme dodjele statičke memorije gdje se memorija dodjeljuje samo kada je to potrebno.

Tablica usporedbe

Osnova usporedbemalloc ()calloc ()
Nema blokovaDodjeljuje jedan blok tražene memorije.
Dodjeljuje više blokova tražene memorije.
Sintaksavoid * malloc (veličina size_t);void * calloc (veličina_t, veličina_t veličina);
Inicijalizacijamalloc () ne briše i ne inicijalizira dodijeljenu memoriju.Dodijeljena memorija se inicijalizira na nulu pomoću calloc ().
Način dodjeleFunkcija malloc () dodjeljuje memoriju veličine 'size' iz hrpe.calloc () funkcija dodjeljuje memoriju čija je veličina jednaka num * veličini.
UbrzatiBrzoUsporedno sporo.

Definicija malloc ()

Funkcija malloc dodjeljuje blok memorije u bajtovima . Korisnik treba izričito navesti veličinu bloka, što je potrebno za korištenje.

Kroz malloc funkciju program zahtijeva RAM sustava za dodjelu memorije, ako je zahtjev prihvaćen (tj., Funkcija malloc kaže uspješno u dodjeli memorije), vraća pokazivač na prvi blok memorije. Ona vraća nevažeći tip pokazivača, što znači da se može dodijeliti bilo koja vrsta pokazivača.

Iako vraća NULL, ako funkcije malloc nisu u mogućnosti dodijeliti potrebnu količinu memorije. Funkcija malloc je dostupna u TURBO C, datoteci zaglavlja alloc.h ili stdlib.h, a na UNIX-u će biti dostupna u zaglavlju ,

SINTAKSA

Sintaksa ove funkcije je sljedeća:

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

na primjer,
int *ptr;
ptr=malloc(10*sizeof (int))

Gdje veličina predstavlja veličinu potrebne memorije u bajtovima (tj. Broj susjednih memorijskih lokacija koje treba dodijeliti).

Ali kao što je ranije spomenuto, funkcija malloc vraća void pointer, stoga je operater casta potreban za promjenu tipa vraćenog pokazivača na temelju naše potrebe, a gornja deklaracija može biti predstavljena u sljedećem obliku:

ptr_var=(type_cast* ) malloc (size)

Gdje je ptr_var ime pokazivača koji zadržava početnu adresu dodijeljenog memorijskog bloka, type_cast je tip podataka u koji se vraća pokazivač (ili tip void) i veličina opisuje veličinu dodijeljenog memorijskog bloka u bajtovima,

Na primjer:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Memorija dodijeljena malloc funkcijom sadrži vrijednost smeća .

Imajte na umu da provjerite da li je odgovarajući zahtjev generiran od strane malloc-a da dodijeli memoriju dodijeljenu RAM-u sustava, ili je odbijena (u slučaju ako potreban prostor nije dostupan). Možemo iskoristiti svojstvo u kojem nije dodijeljena potrebna količina memorije, a funkcija malloc vraća NULL.

Definicija calloc ()

Funkcija calloc funkcionira jednako kao i funkcija malloc, isključujući činjenicu da zahtijeva dva argumenta, kao u slučaju malloc () potreban je samo jedan argument.

Na primjer:
int*ptr;
ptr = (int*)calloc(10, 2);

Ovdje 2 navodi veličinu tipa podataka u bajtu za koji želimo da se izvrši dodjela, što je u ovom slučaju 2 za cijeli broj. 10 označava broj elemenata za koje se dodjeljuje.

Zapamtite da je argument proslijeđen funkciji malloc bio (n * 10), to je jedan argument ne treba zbuniti jer je više argumenata uvijek odvojeno zarezima. Argument (n * 10) ne sadrži zareze između njih. Stoga je to jedan argument, iako ne jednostavan, već izraz.

Vraćajući se na gornju deklaraciju, nakon izvršenja gornje izjave, memorijski blok od 20 bajtova je dodijeljen programu koji traži, a adresa prvog bloka je dodijeljena zahtjevnom programu, a adresa prvog bloka dodijeljena je pokazivaču PTR.

Memorija dodijeljena funkcijom calloc drži sve nule. Funkcija calloc također se može dobiti u datoteci zaglavlja ili u TURBO C.

Ključne razlike između malloc i calloc

Primarne razlike između malloc i calloc funkcija su:

  1. Jedan blok tražene memorije dodijeljen je u malloc, a više blokova tražene memorije je dodijeljeno calloc-om.
  2. Funkcija malloc ne briše i inicijalizira dodijeljenu memoriju. Sadrži vrijednost smeća i stavku dodijeljene memorije ne može se mijenjati. Nasuprot tome, calloc inicijalizira dodijeljenu memoriju na nulu.
  3. malloc je brži od calloc zbog zahtjeva dodatnih koraka inicijalizacije u calloc, ali razlika je zanemariva.
  4. Još jedna razlika između ove dvije je da je calloc malloc + memset, memset dodjeljuje fizičke stranice u memoriji, dok malloc samo dodjeljuje memoriju iz hrpe u virtualnoj adresi.

Zaključak:

I malloc i calloc funkcije koriste se za dodjelu memorije i imaju određenu prednost, a nedostatak kao malloc je brz u usporedbi s calloc. Štoviše, malloc je lakši za korištenje jer traje samo jedan argument jer calloc dodjeljuje memoriju i inicijalizira područje memorije s ZERO. No, radije biste koristili calloc kada je varijabla inicijalizacija važnija za vas.

Top