Skirtumas tarp calloc ir malloc

Turinys:

Skirtumas tarp calloc ir malloc
Skirtumas tarp calloc ir malloc

Video: Skirtumas tarp calloc ir malloc

Video: Skirtumas tarp calloc ir malloc
Video: Calloc vs malloc | GeeksforGeeks 2024, Liepa
Anonim

Pagrindinis skirtumas – calloc vs malloc

Programuojant būtina saugoti duomenis. Duomenys saugomi atmintyje. Šios atminties vietos yra žinomos kaip kintamieji. Kiekvienas kintamasis turi tam tikrą tipą. Tai gali būti sveikieji skaičiai, slankiosios, dvigubos, simboliai ir tt Taip pat yra duomenų struktūrų, kurios gali saugoti fiksuoto dydžio nuoseklų to paties tipo elementų rinkinį. Tai masyvas. Programuotojas turi deklaruoti masyvo dydį. Jei programuotojas deklaruoja penkių elementų sveikųjų skaičių masyvą, negalima priskirti reikšmės didesniam nei deklaruojamas dydis indeksui. Atminties paskirstymas yra fiksuotas ir jo negalima pakeisti vykdymo metu. Kitas atminties paskirstymo būdas yra dinaminis atminties paskirstymas. Dinaminis atminties paskirstymas padeda skirti daugiau atminties, kai reikia, ir atlaisvinti, kai reikia. Antraštės failas turi keturias dinaminio atminties paskirstymo funkcijas. calloc ir malloc yra dvi tokios funkcijos. Pagrindinis skirtumas tarp calloc ir malloc yra tas, kad calloc paskirsto atmintį ir taip pat inicijuoja paskirtus atminties blokus iki nulio, tuo tarpu malloc paskirsto atmintį, bet nepaincijuoja tos skirtos atminties iki nulio. Prieiga prie „calloc“turinio duos nulį, bet malloc duos šiukšlinę vertę.

Kas yra calloc?

Atminties paskirstymas yra atminties priskyrimo vykdomoms programoms procesas. Kartais reikia pakeisti atminties dydį. Todėl naudojamas dinaminis atminties paskirstymas. Tai daroma naudojant rodykles. Rodyklės yra nuorodos kintamieji, turintys kito kintamojo adresą.

Skirtumas tarp calloc ir malloc
Skirtumas tarp calloc ir malloc

01 pav.: calloc ir malloc

calloc reiškia „gretusis paskirstymas“. Jis skiria kelis tokio paties dydžio atminties blokus. Calloc sintaksė yra tokia. Reikia dviejų argumentų. Tai yra blokų skaičius ir kiekvieno bloko dydis. Funkcija calloc grąžina tuščią rodyklę, todėl žymeklio tipui grąžinti pagal reikiamą duomenų tipą naudojamas perdavimo operatorius.

voidcalloc(dydis_t skaičius, dydis_t dydis);

Žiūrėkite toliau pateiktą paprastą C programą.

įtraukti

įtraukti

int main(){

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

if (ptr==NULL){

printf("Atmintis nepaskirta");

}

kita{

printf("Atmintis skirta");

}

grįžti 0;

}

Pagal pirmiau pateiktą programą, išskiriamas gretimas atminties blokas, kuriame gali būti 20 elementų. Kiekvienas iš jų bus sveikojo skaičiaus dydžio. Sizeof(int) naudojamas, nes sveikojo skaičiaus tipas skiriasi priklausomai nuo kompiliatoriaus.

Jei atminties paskirstymas sėkmingas, jis grąžins pagrindinį atminties bloko adresą. Tai reiškia, kad rodyklė ptr dabar nukreipia į pagrindinį to atminties bloko adresą. Visi priskirti regionai inicijuojami iki nulių. Jis išspausdins pranešimą „Atmintis paskirta“. Jei atminties paskirstymas nesėkmingas, jis grąžins nulinę rodyklę. Todėl bus išspausdintas pranešimas Atmintis nepaskirta.

Kas yra malloc?

Funkcija malloc naudojama reikiamam baitų kiekiui atmintyje priskirti. Malloc sintaksė yra tokia. Dydis reiškia reikalingą atmintį baitais.

void malloc(size_t_size);

Funkcija malloc grąžina tuščią rodyklę, todėl žymeklio tipui grąžinti pagal reikiamą duomenų tipą naudojamas perdavimo operatorius.

Žiūrėkite toliau pateiktą paprastą C programą su malloc funkcija.

įtraukti

įtraukti

int main(){

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

if (ptr==NULL){

printf("Atmintis nepaskirta");

}

kita{

printf("Atmintis skirta");

}

grįžti 0;

}

Pagal aukščiau pateiktą programą bus paskirstytas atminties blokas. Rodyklė nurodo skirtos atminties pradžios adresą. Grąžintas žymeklis konvertuojamas į sveikojo skaičiaus tipą. Jei atmintis yra skirta, bus išspausdintas pranešimas apie atmintį. Jei atmintis nepaskirstyta, grįš nulinis rodyklė. Todėl atmintis nepaskirta, pranešimas bus išspausdintas.

Kokie yra calloc ir malloc panašumai?

  • Abi šios funkcijos nurodytos antraštės faile. Tai standartinis bibliotekos antraštės failas.
  • Abi funkcijos naudojamos dinaminiam atminties paskirstymui.
  • Calloc ir malloc grąžintas žymeklis turėtų būti perkeltas į konkretų tipą.
  • Sėkmingai paskirstant atmintį, abi funkcijos grąžins žymeklį su baziniu atminties bloko adresu.
  • Jei atminties paskirstymas nepavyksta, bus grąžinta nulinė rodyklė.

Kuo skiriasi calloc ir malloc?

calloc vs malloc

calloc yra dinaminio atminties paskirstymo funkcija C kalbos stdlib.h antraštės faile, kuri priskiria tam tikrą skaičių baitų ir inicijuoja juos iki nulio. malloc yra dinaminio atminties paskirstymo funkcija C kalbos stdlib.h antraštės faile, kuri priskiria tam tikrą skaičių baitų.
Reikšmė
calloc reiškia gretimą paskirstymą. malloc reiškia atminties paskirstymą.
Sintaksė
calloc atlieka sintaksę, panašią į void calloc(size_t_num, size_t size); malloc taiko sintaksę, panašią į void malloc(size_t_size);.
Argumentų skaičius
calloc turi du argumentus. Tai yra blokų skaičius ir kiekvieno bloko dydis. malloc turi vieną argumentą. Tai yra baitų skaičius.
Greitis
calloc užtrunka šiek tiek ilgiau nei malloc. Taip yra dėl papildomo žingsnio, kai paskirstyta atmintis inicijuojama nuliu. malloc yra greitesnis nei calloc.

Santrauka – calloc vs malloc

Statiškai paskirstant atmintį, pvz., naudojant masyvus, atmintis yra fiksuota. Jei saugoma nedaug elementų, likusi atminties dalis švaistoma. Tai taip pat gali sukelti klaidų, kai skirta atmintis yra mažesnė nei reikia. Todėl naudojamas dinaminis atminties paskirstymas. C kalboje calloc ir malloc suteikia dinaminį atminties paskirstymą. Skirtumas tarp calloc ir malloc yra tas, kad calloc paskirsto atmintį ir taip pat inicijuoja paskirtus atminties blokus iki nulio, o malloc paskirsto atmintį, bet neinicijuoja atminties blokų iki nulio. „Malloc“naudoja du argumentus, o „calloc“– du argumentus.

Atsisiųskite Calloc vs malloc PDF

Galite atsisiųsti šio straipsnio PDF versiją ir naudoti ją neprisijungus, kaip nurodyta citatos pastaboje. Atsisiųskite PDF versiją čia: Skirtumas tarp calloc ir malloc

Rekomenduojamas: