Razlika med calloc in malloc

Kazalo:

Razlika med calloc in malloc
Razlika med calloc in malloc

Video: Razlika med calloc in malloc

Video: Razlika med calloc in malloc
Video: CS50 2013 - Week 5, continued 2024, Julij
Anonim

Ključna razlika – calloc proti malloc

Pri programiranju je potrebno shranjevati podatke. Podatki so shranjeni v pomnilniku. Te pomnilniške lokacije so znane kot spremenljivke. Vsaka spremenljivka ima določen tip. Lahko so cela, lebdeča, dvojna, znaki itd. Obstajajo tudi podatkovne strukture, ki lahko shranijo zaporedno zbirko elementov istega tipa s fiksno velikostjo. Je niz. Programer mora deklarirati velikost polja. Če programer deklarira niz celih števil za pet elementov, indeksu ni mogoče dodeliti vrednosti, ki je višja od deklarirane velikosti. Dodelitev pomnilnika je fiksna in je med izvajanjem ni mogoče spremeniti. Druga metoda dodeljevanja pomnilnika je dinamično dodeljevanje pomnilnika. Dinamična dodelitev pomnilnika pomaga dodeliti več pomnilnika, ko je to potrebno, in sprostiti, ko je to potrebno. Glavna datoteka ima štiri funkcije za dinamično dodeljevanje pomnilnika. calloc in malloc sta dve takšni funkciji. Ključna razlika med calloc in malloc je v tem, da calloc dodeli pomnilnik in tudi inicializira dodeljene bloke pomnilnika na nič, medtem ko malloc dodeli pomnilnik, vendar tega dodeljenega pomnilnika ne inicializira na nič. Dostop do vsebine v callocu bo dal nič, malloc pa bo dal nepotrebno vrednost.

Kaj je calloc?

Dodeljevanje pomnilnika je postopek dodeljevanja pomnilnika za izvajajoče se programe. Včasih je treba spremeniti velikost pomnilnika. Zato se uporablja dinamična dodelitev pomnilnika. Izvaja se s pomočjo kazalcev. Kazalci so referenčne spremenljivke, ki vsebujejo naslov druge spremenljivke.

Razlika med calloc in malloc
Razlika med calloc in malloc

Slika 01: calloc in malloc

calloc pomeni »sosednja dodelitev«. Dodeljuje več blokov pomnilnika z enako velikostjo. Sintaksa za calloc je naslednja. Potrebna sta dva argumenta. So število blokov in velikost vsakega bloka. Funkcija calloc vrne prazen kazalec, zato se za vrnitev vrste kazalca v skladu z zahtevanim podatkovnim tipom uporabi cast operator.

voidcalloc(size_t num, size_t size);

Glejte spodnji preprost program C.

include

include

int main(){

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

if (ptr==NULL){

printf(“Pomnilnik ni dodeljen”);

}

drugo{

printf(“Pomnilnik je dodeljen”);

}

vrni 0;

}

V skladu z zgornjim programom je dodeljen sosednji blok pomnilnika, ki lahko vsebuje 20 elementov. Vsak bo imel velikost celega števila. Sizeof(int) se uporablja, ker se tip celega števila razlikuje od prevajalnika do prevajalnika.

Če je dodelitev pomnilnika uspešna, bo vrnil osnovni naslov pomnilniškega bloka. To pomeni, da kazalec ptr zdaj kaže na osnovni naslov tega pomnilniškega bloka. Vse dodeljene regije so inicializirane na ničle. Natisnil bo sporočilo Memory Allocated. Če je dodelitev pomnilnika neuspešna, vrne ničelni kazalec. Zato bo natisnil sporočilo Pomnilnik ni dodeljen.

Kaj je malloc?

Funkcija malloc se uporablja za dodelitev zahtevane količine bajtov v pomnilniku. Sintaksa za malloc je naslednja. Velikost predstavlja zahtevani pomnilnik v bajtih.

void malloc(size_t_size);

Funkcija malloc vrne prazen kazalec, tako da se za vrnitev tipa kazalca v skladu z zahtevanim podatkovnim tipom uporabi cast operator.

Glejte spodnji preprost program C s funkcijo malloc.

include

include

int main(){

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

if (ptr==NULL){

printf(“Pomnilnik ni dodeljen”);

}

drugo{

printf(“Pomnilnik je dodeljen”);

}

vrni 0;

}

Glede na zgornji program bo dodeljen blok pomnilnika. Kazalec kaže na začetni naslov dodeljenega pomnilnika. Vrnjeni kazalec se pretvori v celoštevilski tip. Če je pomnilnik dodeljen, bo natisnil sporočilo o dodeljenem pomnilniku. Če pomnilnik ni dodeljen, bo vrnjen ničelni kazalec. Zato se natisne sporočilo, da pomnilnik ni dodeljen.

Kakšne so podobnosti med calloc in malloc?

  • Obe funkciji sta deklarirani v datoteki glave. Je standardna datoteka glave knjižnice.
  • Obe funkciji se uporabljata za dinamično dodeljevanje pomnilnika.
  • Kazalec, ki ga vrneta calloc in malloc, je treba pretvoriti v določen tip.
  • Pri uspešni dodelitvi pomnilnika bosta obe funkciji vrnili kazalec z osnovnim naslovom pomnilniškega bloka.
  • Če je dodelitev pomnilnika neuspešna, bo vrnjen ničelni kazalec.

Kakšna je razlika med calloc in malloc?

calloc proti malloc

calloc je funkcija za dinamično dodeljevanje pomnilnika v datoteki glave stdlib.h jezika C, ki dodeli določeno število bajtov in jih inicializira na nič. malloc je funkcija za dinamično dodeljevanje pomnilnika v datoteki glave stdlib.h jezika C, ki dodeli določeno število bajtov.
Pomen
calloc pomeni sosednjo dodelitev. malloc pomeni dodelitev pomnilnika.
Sintaksa
calloc sledi sintaksi, podobni void calloc(size_t_num, size_t size); malloc sledi sintaksi, podobni void malloc(size_t_size);.
Število argumentov
calloc sprejme dva argumenta. Gre za število blokov in velikost vsakega bloka. malloc sprejme en argument. Gre za število bajtov.
Hitrost
calloc traja malo dlje kot malloc. To je zaradi dodatnega koraka inicializacije dodeljenega pomnilnika z ničlo. malloc je hitrejši od calloc.

Povzetek – calloc proti malloc

Pri statičnem dodeljevanju pomnilnika, kot je uporaba nizov, je pomnilnik fiksen. Če je shranjenih le malo elementov, je preostali pomnilnik izgubljen. Napake lahko povzroči tudi, če je dodeljeni pomnilnik majhen od zahtevanega pomnilnika. Zato se uporablja dinamična dodelitev pomnilnika. V jeziku C calloc in malloc zagotavljata dinamično dodeljevanje pomnilnika. Razlika med calloc in malloc je v tem, da calloc dodeli pomnilnik in tudi inicializira dodeljene pomnilniške bloke na nič, medtem ko malloc dodeli pomnilnik, vendar ne inicializira pomnilniških blokov na nič. Malloc sprejme dva argumenta, calloc pa dva argumenta.

Prenesite PDF za calloc proti malloc

Različico PDF tega članka lahko prenesete in jo uporabite za namene brez povezave v skladu z opombo o citiranju. Prenesite PDF različico tukaj: Razlika med calloc in malloc

Priporočena: