Tofauti Muhimu – calloc vs malloc
Katika upangaji, ni muhimu kuhifadhi data. Data huhifadhiwa kwenye kumbukumbu. Maeneo haya ya kumbukumbu yanajulikana kama vigezo. Kila kigezo kina aina maalum. Zinaweza kuwa nambari kamili, za kuelea, mbili, herufi n.k. Pia kuna miundo ya data inayoweza kuhifadhi mkusanyiko wa mpangilio wa ukubwa usiobadilika wa vipengele vya aina moja. Ni safu. Mtayarishaji programu lazima atangaze saizi ya safu. Ikiwa kipanga programu kitatangaza safu kamili ya vipengee vitano, haiwezekani kugawa thamani kwa faharasa iliyo juu zaidi ya saizi iliyotangazwa. Mgao wa kumbukumbu umewekwa, na hauwezi kubadilishwa wakati wa kukimbia. Njia nyingine ya ugawaji kumbukumbu ni mgao wa kumbukumbu unaobadilika. Ugawaji wa kumbukumbu inayobadilika husaidia kutenga kumbukumbu zaidi inapohitajika na kutolewa inapohitajika. Faili ya kichwa ina kazi nne za ugawaji wa kumbukumbu ya nguvu. calloc na malloc ni kazi mbili kama hizo. Tofauti kuu kati ya calloc na malloc ni kwamba calloc hutenga kumbukumbu na pia kuanzisha vizuizi vya kumbukumbu vilivyotengwa hadi sifuri ilhali malloc hutenga kumbukumbu lakini haianzishi kumbukumbu hiyo iliyotengwa hadi sifuri. Kufikia maudhui katika calloc kutatoa sifuri, lakini malloc itatoa thamani ya takataka.
calloc ni nini?
Ugawaji wa kumbukumbu ni mchakato wa kugawa kumbukumbu kwa programu zinazotekeleza. Wakati mwingine ni muhimu kubadilisha ukubwa wa kumbukumbu. Kwa hiyo, ugawaji wa kumbukumbu ya nguvu hutumiwa. Inafanywa kwa kutumia viashiria. Viashirio ni vigeu vya marejeleo vinavyoshikilia anwani ya kigezo kingine.
Kielelezo 01: calloc na malloc
calloc inawakilisha "mgao unaoshikamana". Inatenga vizuizi vingi vya kumbukumbu na saizi sawa. Syntax ya calloc ni kama ifuatavyo. Inachukua hoja mbili. Wao ni idadi ya vitalu na ukubwa wa kila block. Kitengo cha kukokotoa hurejesha kielekezi kisicho na kitu, kwa hivyo opereta hutumika kurejesha aina ya kielekezi kulingana na aina ya data inayohitajika.
batilicalloc(idadi_t, saizi_t);
Rejelea programu rahisi iliyo hapa chini.
int main(){
int ptr=(int) calloc(20, sizeof(int));
kama (ptr==NULL){
printf(“Kumbukumbu haijatengwa”);
}
nyingine{
printf(“Kumbukumbu imetengwa”);
}
rudi 0;
}
Kulingana na programu iliyo hapo juu, hifadhi ya kumbukumbu ambayo inaweza kuhifadhi vipengele 20 imetengwa. Kila moja itakuwa na ukubwa wa nambari kamili. Ukubwa wa(int) hutumika kwa sababu aina kamili hutofautiana kutoka kwa mkusanyaji hadi mkusanyaji.
Ikiwa ugavi wa kumbukumbu utafaulu, utarudisha anwani ya msingi ya kizuizi cha kumbukumbu. Inamaanisha kuwa pointer ptr sasa inaelekeza kwenye anwani ya msingi ya kizuizi hicho cha kumbukumbu. Mikoa yote iliyotengwa imeanzishwa hadi sufuri. Itachapisha ujumbe wa Kumbukumbu Iliyotengwa. Ikiwa mgao wa kumbukumbu haujafaulu, itarudisha kiashiria kisichofaa. Kwa hivyo, itachapisha Kumbukumbu haijagawiwa ujumbe.
Malloc ni nini?
Kitendakazi cha malloc kinatumika kutenga kiasi kinachohitajika cha baiti kwenye kumbukumbu. Syntax ya malloc ni kama ifuatavyo. Ukubwa unawakilisha kumbukumbu inayohitajika katika baiti.
batili malloc(size_t_size);
Kitengo cha kukokotoa cha chaguo la kukokotoa hurejesha kiashiria utupu, kwa hivyo opereta hutumika kurejesha aina ya kielekezi kulingana na aina ya data inayohitajika.
Rejelea programu rahisi iliyo hapa chini yenye kipengele cha malloc.
int main(){
int ptr=(int) malloc (10sizeof(int));
kama (ptr==NULL){
printf(“Kumbukumbu haijatengwa”);
}
nyingine{
printf(“Kumbukumbu imetengwa”);
}
rudi 0;
}
Kulingana na programu iliyo hapo juu, hifadhi ya kumbukumbu itatengwa. Pointer inaashiria anwani ya kuanzia ya kumbukumbu iliyotengwa. Kielekezi kilichorejeshwa kinabadilishwa kuwa aina kamili. Kama kumbukumbu ni zilizotengwa itakuwa magazeti kumbukumbu ni zilizotengwa ujumbe. Ikiwa kumbukumbu haijatengwa, kiashiria kisicho na maana kitarudi. Kwa hivyo, kumbukumbu haijatengwa ujumbe utachapishwa.
Je, Kuna Ufanano Gani Kati ya kaloki na malloc?
- Vitendaji hivi vyote viwili vinatangazwa katika faili ya kichwa. Ni faili ya kawaida ya kichwa cha maktaba.
- Vitendaji vyote viwili vinatumika kwa mgao wa kumbukumbu unaobadilika.
- Kielekezi kilichorejeshwa kwa calloc na malloc kinafaa kutupwa katika aina mahususi.
- Katika ugawaji wa kumbukumbu uliofaulu, chaguo za kukokotoa zote mbili zitarudisha kielekezi chenye anwani ya msingi ya kizuizi cha kumbukumbu.
- Ikiwa ugavi wa kumbukumbu haujafaulu, kiashiria batili kitarejeshwa.
Kuna tofauti gani Kati ya kaloki na malloc?
calloc vs malloc |
|
calloc ni chaguo la kukokotoa la mgao wa kumbukumbu unaobadilika katika faili ya kichwa cha lugha ya C stdlib.h ambayo hutenga idadi mahususi ya baiti na kuzianzisha hadi sufuri. | malloc ni chaguo la kukokotoa la mgao wa kumbukumbu unaobadilika katika faili ya kichwa cha lugha ya C stdlib.h inayotenga idadi mahususi ya baiti. |
Maana | |
calloc inawakilisha mgao shirikishi. | malloc inawakilisha mgao wa kumbukumbu. |
Sintaksia | |
calloc hufuata sintaksia sawa na batili calloc(saizi_t_num, size_t size); | malloc hufuata sintaksia sawa na utupu malloc(size_t_size);. |
Idadi ya Hoja | |
calloc inachukua hoja mbili. Ni idadi ya vizuizi na saizi ya kila block. | malloc inachukua hoja moja. Ni idadi ya baiti. |
Kasi | |
calloc huchukua muda mrefu kidogo kuliko malloc. Hiyo ni kwa sababu ya hatua ya ziada ya kuanzisha kumbukumbu iliyotengwa kwa sifuri. | malloc ina kasi kuliko kaloki. |
Muhtasari – calloc vs malloc
Katika mgao wa kumbukumbu tuli kama vile sisi kwa kutumia mkusanyiko, kumbukumbu imerekebishwa. Ikiwa vitu vichache vimehifadhiwa, basi kumbukumbu iliyobaki inapotea. Inaweza pia kusababisha makosa wakati kumbukumbu iliyotengwa ni ndogo kuliko kumbukumbu inayohitajika. Kwa hiyo, ugawaji wa kumbukumbu ya nguvu hutumiwa. Katika lugha ya C, calloc na malloc hutoa mgao wa kumbukumbu wenye nguvu. Tofauti kati ya calloc na malloc ni kwamba calloc hutenga kumbukumbu na pia kuanzisha vizuizi vya kumbukumbu vilivyogawiwa hadi sifuri huku malloc ikitenga kumbukumbu lakini haianzishi vizuizi vya kumbukumbu hadi sifuri. Malloc anachukua hoja mbili huku calloc akichukua hoja mbili.
Pakua PDF ya calloc vs malloc
Unaweza kupakua toleo la PDF la makala haya na uitumie kwa madhumuni ya nje ya mtandao kulingana na dokezo la manukuu. Tafadhali pakua toleo la PDF hapa: Tofauti Kati ya calloc na malloc