Razlika između calloc i malloc

Ključna razlika - calloc vs malloc

U programiranju je potrebno pohraniti podatke. Podaci su pohranjeni u memoriji. Ove memorijske lokacije poznate su kao varijable. Svaka varijabla ima određenu vrstu. To mogu biti cjelobrojni brojevi, plutači, parovi, znakovi itd. Postoje i strukture podataka u koje se može pohraniti zbirka slijednih elemenata fiksne veličine iste vrste. To je niz. Programer mora izjaviti veličinu polja. Ako programer deklarira niz cijelih brojeva za pet elemenata, nije moguće dodijeliti vrijednost indeksu većem od deklarisane veličine. Dodjela memorije je fiksna i ne može se mijenjati u vrijeme izvođenja. Drugi način dodjeljivanja memorije je dinamička raspodjela memorije. Dinamično raspoređivanje memorije pomaže dodijeliti više memorije kada je potrebno i osloboditi kada je potrebno. Datoteka zaglavlja ima četiri funkcije za dinamičku raspodjelu memorije. calloc i malloc su dvije takve funkcije. ključna razlika između calloc i malloc je to calloc raspoređuje memoriju i također inicijalizira dodijeljene memorijske blokove u nulu, dok malloc raspodjeljuje memoriju, ali ne inicijalizira dodijeljenu memoriju na nulu. Pristupom sadržaju u calloc dat će nulu, ali malloc će dati vrijednost smeća.

SADRŽAJ

1. Pregled i ključne razlike
2. Što je calloc
3. Što je malloc
4. Sličnosti između calloc i malloc
5. Usporedna usporedba - calloc vs malloc u tabelarnom obliku
6. Sažetak

Što je calloc?

Dodjela memorije je proces dodjele memorije za izvršavanje programa. Ponekad je potrebno promijeniti veličinu memorije. Stoga se koristi dinamička raspodjela memorije. Izvodi se pomoću pokazivača. Pokazivači su referentne varijable koje sadrže adresu druge varijable.

Slika 01: calloc i malloc

calloc znači "neprekidna raspodjela". Ona raspoređuje više blokova memorije iste veličine. Sintaksa za calloc je sljedeća. Potrebna su dva argumenta. Oni su broj blokova i veličina svakog bloka. Funkcija calloc vraća poidalni pokazivač, tako da se lijevani operator koristi za vraćeni tip pokazivača prema zahtijevanoj vrsti podataka.

        praznina * calloc (veličina_t broj, veličina_t veličina);

Pogledajte niže jednostavan C program.

#include

#include

int main ()

int ptr * = (int *) calloc (20, sizeof (int));

ako je (ptr == NULL)

printf ("Memorija nije dodijeljena");

drugo

printf ("Dodjeljena je memorija");

vratiti 0;

Prema gore navedenom programu, dodijeljen je neprekidni blok memorije koji može sadržavati 20 elemenata. Svaka će imati veličinu cijelog broja. Sizeof (int) se koristi jer vrsta cijelog broja varira od prevoditelja do sastavljača.

Ako je dodjela memorije uspješna, vratit će osnovnu adresu memorijskog bloka. To znači da pokazivač ptr sada pokazuje na osnovnu adresu tog memorijskog bloka. Sve dodijeljene regije inicijalizirane su u nule. Ispisat će poruku dodijeljenoj memoriji. Ako dodjeljivanje memorije nije uspjelo, vratit će se null pointer. Stoga će se ispisati poruka Memorija nije dodijeljena.

Što je malloc?

Funkcija malloc koristi se za raspoređivanje potrebne količine bajta u memoriji. Sintaksa za malloc je sljedeća. Veličina predstavlja potrebnu memoriju u bajtovima.

        praznina * malloc (size_t_size);

Funkcija malloc vraća poidorni pokazivač, pa se cast operator koristi za vraćeni tip pokazivača prema zahtijevanoj vrsti podataka.

Pogledajte dolje jednostavan program C s funkcijom malloc.

#include

#include

int main ()

int ptr * = (int *) malloc (10 * sizeof (int));

ako je (ptr == NULL)

printf ("Memorija nije dodijeljena");

drugo

printf ("Dodjeljena je memorija");

vratiti 0;

Prema gornjem programu dodijelit će se blok memorije. Pokazivač pokazuje na početnu adresu dodijeljene memorije. Vraćeni pokazivač se pretvara u cijeli broj. Ako je dodijeljena memorija, ona će ispisati memoriju, a dodijeljena je i poruka. Ako memorija nije dodijeljena, vratit će se null pointer. Stoga će memorija koja nije dodijeljena ispisati poruku.

Koje su sličnosti između calloc i malloc?

  • Obje ove funkcije su deklarirane u datoteci zaglavlja. To je standardna datoteka zaglavlja knjižnice.
  • Obje funkcije koriste se za dinamičku raspodjelu memorije.
  • Pokazivač vraćen sa calloc i malloc treba lijevati na određenu vrstu.
  • U uspješnoj raspodjeli memorije, obje će funkcije vratiti pokazivač s osnovnom adresom memorijskog bloka.
  • Ako dodjeljivanje memorije nije uspjelo, vratit će se null pointer.

Koja je razlika između calloc i malloc?

calloc vs malloc

calloc je funkcija za dinamičku raspodjelu memorije u datoteci zaglavlja stdlib.h jezika C koja dodjeljuje određeni broj bajtova i inicijalizira ih na nulu. malloc je funkcija za dinamičku dodjelu memorije u datoteci zaglavlja stdlib.h jezika C koja dodjeljuje određeni broj bajtova.
 Značenje
calloc predstavlja neprekidnu raspodjelu. malloc označava dodjelu memorije.
Sintaksa
calloc slijedi sintaksu sličnu praznini * calloc (size_t_num, size_t size); malloc prati sintaksu sličnu void * malloc (size_t_size);.
 Broj argumenata
calloc uzima dva argumenta. Oni su broj blokova i veličina svakog bloka. malloc uzima jedan argument. To je broj bajtova.
Ubrzati
calloc traje malo duže nego malloc. To je zbog dodatnog koraka inicijalizacije dodijeljene memorije na nulu. malloc je brži od calloc.

Sažetak - calloc vs malloc

U statičkoj raspodjeli memorije kao što je nama nizima, memorija je fiksna. Ako je pohranjeno malo elemenata, ostatak memorije se troši. Također može uzrokovati pogreške kada je dodijeljena memorija mala od potrebne memorije. Stoga se koristi dinamička raspodjela memorije. U jeziku C, calloc i malloc omogućuju dinamičku raspodjelu memorije. Razlika između calloc i malloc je u tome što calloc dodeljuje memoriju i također inicijalizira dodijeljene memorijske blokove na nulu, dok malloc raspodjeljuje memoriju, ali ne inicijalizira memorijske blokove u nulu. Malloc uzima dva argumenta, dok calloc ima dva argumenta.

Preuzmite PDF datoteke calloc vs malloc

Možete preuzeti PDF verziju ovog članka i koristiti je za izvanmrežne svrhe, prema napomeni. Molimo preuzmite PDF verziju ovdje: Razlika između calloc i malloc

Referenca:

1.Kumar, Krishan. "Razlika između Malloca i Calloca u C." Cs-Fundamentals.com, Cs-Fundamentals.com. Dostupno ovdje  
2. "C dinamička raspodjela memorije." Wikipedia, Zaklada Wikimedia, 13. siječnja 2018. Dostupno ovdje 
3. "Calloc () nasuprot malloc ()." GeeksforGeeks, 14. lipnja 2017. Dostupno ovdje