Razlika između calloc i malloc

Sadržaj:

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

Video: Razlika između calloc i malloc

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

Ključna razlika – calloc naspram malloc

U programiranju je potrebno pohraniti podatke. Podaci se pohranjuju u memoriju. Ove memorijske lokacije poznate su kao varijable. Svaka varijabla ima određeni tip. Mogu biti cijeli brojevi, brojevi s pomičnim brojem, dvostruki brojevi, znakovi itd. Postoje i podatkovne strukture koje mogu pohraniti sekvencijalnu kolekciju elemenata iste vrste 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 veću od deklarirane veličine. Dodjela memorije je fiksna i ne može se mijenjati tijekom izvođenja. Druga metoda dodjele memorije je dinamička dodjela memorije. Dinamička dodjela memorije pomaže u dodjeljivanju više memorije kada je potrebno i oslobađanju kada je potrebno. Datoteka zaglavlja ima četiri funkcije za dinamičku dodjelu memorije. calloc i malloc dvije su takve funkcije. Ključna razlika između calloc i malloc je u tome što calloc dodjeljuje memoriju i također inicijalizira dodijeljene memorijske blokove na nulu, dok malloc dodjeljuje memoriju, ali ne inicijalizira tu dodijeljenu memoriju na nulu. Pristup sadržaju u callocu dat će nulu, ali malloc će dati nepotrebnu vrijednost.

Š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 dodjela memorije. To se radi pomoću pokazivača. Pokazivači su referentne varijable koje sadrže adresu druge varijable.

Razlika između calloka i malloka
Razlika između calloka i malloka

Slika 01: calloc i malloc

calloc označava "kontinuiranu dodjelu". Dodjeljuje više blokova memorije iste veličine. Sintaksa za calloc je sljedeća. Potrebna su dva argumenta. To su broj blokova i veličina svakog bloka. Funkcija calloc vraća void pokazivač, tako da se cast operator koristi za vraćanje tipa pokazivača prema potrebnom tipu podataka.

voidcalloc(size_t num, size_t size);

Pogledajte donji jednostavan C program.

uključi

uključi

int main(){

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

if (ptr==NULL){

printf(“Memorija nije dodijeljena”);

}

drugo{

printf(“Memorija je dodijeljena”);

}

return 0;

}

Prema gornjem programu, alociran je kontinuirani blok memorije koji može sadržavati 20 elemenata. Svaki će imati veličinu cijelog broja. Sizeof(int) se koristi jer se tip cijelog broja razlikuje od prevoditelja do prevoditelja.

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 se inicijaliziraju na nule. Ispisat će poruku Memory Allocated. Ako je dodjela memorije neuspješna, vratit će nulti pokazivač. Stoga će ispisati poruku Memorija nije dodijeljena.

Što je malloc?

Funkcija malloc koristi se 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ćanje tipa pokazivača u skladu sa traženim tipom podataka.

Pogledajte donji jednostavan C program s malloc funkcijom.

uključi

uključi

int main(){

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

if (ptr==NULL){

printf(“Memorija nije dodijeljena”);

}

drugo{

printf(“Memorija je dodijeljena”);

}

return 0;

}

Prema gornjem 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 poruku da je memorija dodijeljena. Ako memorija nije dodijeljena, vratit će se nulti pokazivač. Stoga će se ispisati poruka o nedodijeljenoj memoriji.

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

  • Obje ove funkcije su deklarirane u datoteci zaglavlja. To je standardna datoteka zaglavlja biblioteke.
  • Obje funkcije koriste se za dinamičku dodjelu memorije.
  • Pokazivač koji vraćaju calloc i malloc treba pretvoriti u određeni tip.
  • U uspješnoj dodjeli memorije, obje funkcije će vratiti pokazivač s osnovnom adresom memorijskog bloka.
  • Ako je dodjela memorije neuspješna, vratit će se nulti pokazivač.

Koja je razlika između calloc i malloc?

calloc vs malloc

calloc je funkcija za dinamičku dodjelu 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 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 je broj blokova i veličina svakog bloka. malloc uzima jedan argument. To je broj bajtova.
Brzina
calloc traje malo dulje nego malloc. To je zbog dodatnog koraka inicijalizacije dodijeljene memorije nulom. malloc je brži od calloca.

Sažetak – calloc vs malloc

U statičkoj dodjeli memorije kao što je korištenje nizova, memorija je fiksna. Ako je pohranjeno malo elemenata, tada se ostatak memorije gubi. Također može uzrokovati pogreške kada je dodijeljena memorija manja od potrebne memorije. Stoga se koristi dinamička dodjela memorije. U jeziku C, calloc i malloc omogućuju dinamičku dodjelu memorije. Razlika između calloc i malloc 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.

Preuzmi PDF calloc vs malloc

Možete preuzeti PDF verziju ovog članka i koristiti ga za izvanmrežne svrhe prema napomeni o citatu. Preuzmite PDF verziju ovdje: Razlika između calloc i malloc

Preporučeni: