Razlika između calloc-a i malloc-a

Sadržaj:

Razlika između calloc-a i malloc-a
Razlika između calloc-a i malloc-a

Video: Razlika između calloc-a i malloc-a

Video: Razlika između calloc-a i malloc-a
Video: Razlika Između ŠEFA i LIDERA! 2024, Novembar
Anonim

Ključna razlika – calloc vs malloc

U programiranju je potrebno pohraniti podatke. Podaci se pohranjuju u memoriju. Ove memorijske lokacije poznate su kao varijable. Svaka varijabla ima specifičan tip. Oni mogu biti cijeli brojevi, plutajući, dvostruki, znakovi itd. Postoje i strukture podataka koje mogu pohraniti sekvencijalnu kolekciju elemenata istog tipa fiksne veličine. To je niz. Programer mora deklarirati veličinu niza. Ako programer deklarira niz cijelih brojeva za pet elemenata, nije moguće dodijeliti vrijednost indeksu koji je veći od deklarirane veličine. Raspodjela memorije je fiksna i ne može se promijeniti u vrijeme izvođenja. Druga metoda dodjele memorije je dinamička dodjela memorije. Dinamička alokacija memorije pomaže da se dodijeli više memorije kada je to potrebno i da se oslobodi kada je potrebno. Datoteka zaglavlja ima četiri funkcije za dinamičku dodjelu memorije. calloc i malloc su dvije takve funkcije. Ključna razlika između calloc-a i malloc-a je u tome što calloc dodjeljuje memoriju i inicijalizira dodijeljene memorijske blokove na nulu, dok malloc dodjeljuje memoriju, ali ne inicijalizira tu dodijeljenu memoriju na nulu. Pristup sadržaju u calloc-u će dati nulu, ali malloc će dati vrijednost smeća.

Šta je calloc?

Alokacija memorije je proces dodjeljivanja memorije za izvršavanje programa. Ponekad je potrebno promijeniti veličinu memorije. Stoga se koristi dinamička alokacija memorije. To se radi pomoću pokazivača. Pokazivači su referentne varijable koje drže adresu druge varijable.

Razlika između calloc i malloc
Razlika između calloc i malloc

Slika 01: calloc i malloc

calloc znači “kontinualna alokacija”. Dodjeljuje 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 void pokazivač, tako da se cast operator koristi za vraćeni tip pokazivača prema traženom tipu podataka.

voidcalloc(size_t num, size_t size);

Pogledajte donji jednostavan C program.

include

include

int main(){

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

if (ptr==NULL){

printf(“Memorija nije dodijeljena”);

}

drugo{

printf(“Memorija je dodijeljena”);

}

povrat 0;

}

Prema gore navedenom programu, dodeljuje se neprekidni blok memorije koji može sadržati 20 elemenata. Svaki će imati veličinu cijelog broja. Koristi se sizeof(int) jer se tip cijelog broja razlikuje od kompajlera do kompajlera.

Ako je alokacija 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 su inicijalizirane na nule. Ispisat će poruku o dodijeljenoj memoriji. Ako je dodjela memorije neuspješna, vratit će null pokazivač. Stoga će ispisati poruku Memorija nije dodijeljena.

Šta je malloc?

Funkcija malloc se koristi za dodjelu potrebne količine bajtova u memoriji. Sintaksa za malloc je sljedeća. Veličina predstavlja potrebnu memoriju u bajtovima.

void malloc(size_t_size);

Funkcija malloc vraća void pokazivač, tako da se cast operator koristi za vraćeni tip pokazivača prema traženom tipu podataka.

Pogledajte donji jednostavan C program sa malloc funkcijom.

include

include

int main(){

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

if (ptr==NULL){

printf(“Memorija nije dodijeljena”);

}

drugo{

printf(“Memorija je dodijeljena”);

}

povrat 0;

}

Prema gore navedenom programu, blok memorije će biti dodijeljen. Pokazivač pokazuje na početnu adresu dodijeljene memorije. Vraćeni pokazivač se pretvara u cjelobrojni tip. Ako je memorija dodijeljena, ispisat će se poruka o dodjeli memorije. Ako memorija nije dodijeljena, vratit će se null pokazivač. Dakle, poruka nije dodijeljena memoriji će se ispisati.

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

  • Obje ove funkcije su deklarirane u zaglavlju. To je standardni fajl zaglavlja biblioteke.
  • Obje funkcije se koriste za dinamičku dodjelu memorije.
  • Pokazivač koji vraćaju calloc i malloc treba da se ubaci u određeni tip.
  • U uspješnoj dodjeli memorije, obje funkcije će vratiti pokazivač sa osnovnom adresom memorijskog bloka.
  • Ako je dodjela memorije neuspješna, bit će vraćen null pokazivač.

Koja je razlika između calloc-a i malloc-a?

calloc vs malloc

calloc je funkcija za dinamičku dodjelu memorije u jeziku C stdlib.h zaglavni fajl koji dodjeljuje određeni broj bajtova i inicijalizira ih na nulu. malloc je funkcija za dinamičku dodjelu memorije u jeziku C stdlib.h zaglavni fajl koji dodjeljuje određeni broj bajtova.
Značenje
calloc označava kontinuiranu dodjelu. malloc označava dodjelu memorije.
Sintaksa
calloc slijedi sintaksu sličnu void calloc(size_t_num, size_t size); malloc slijedi sintaksu sličnu void malloc(size_t_size);.
Broj argumenata
calloc uzima dva argumenta. To su broj blokova i veličina svakog bloka. malloc uzima jedan argument. To je broj bajtova.
Speed
calloc traje malo duže od malloc-a. To je zbog dodatnog koraka inicijalizacije dodijeljene memorije na nulu. malloc je brži od calloc-a.

Sažetak – calloc vs malloc

U statičkoj alokaciji memorije kao što je kod nas pomoću nizova, memorija je fiksna. Ako se pohrani nekoliko elemenata, onda se ostatak memorije gubi. Također može uzrokovati greške kada je dodijeljena memorija manja od potrebne memorije. Stoga se koristi dinamička alokacija memorije. U jeziku C, calloc i malloc pružaju dinamičku dodjelu memorije. Razlika između calloc-a i malloc-a je u tome što calloc dodjeljuje memoriju i također inicijalizira dodijeljene memorijske blokove na nulu, dok malloc dodjeljuje memoriju, ali ne inicijalizira memorijske blokove na nulu. Malloc uzima dva argumenta dok calloc uzima dva argumenta.

Preuzmite PDF calloc vs malloc

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

Preporučuje se: