Հիմնական տարբերություն – calloc vs malloc
Ծրագրավորման մեջ անհրաժեշտ է պահպանել տվյալներ։ Տվյալները պահվում են հիշողության մեջ: Այս հիշողության վայրերը հայտնի են որպես փոփոխականներ: Յուրաքանչյուր փոփոխական ունի որոշակի տեսակ: Դրանք կարող են լինել ամբողջ թվեր, լողացողներ, կրկնակիներ, նիշեր և այլն: Կան նաև տվյալների կառուցվածքներ, որոնք կարող են պահել նույն տիպի տարրերի ֆիքսված չափի հաջորդական հավաքածու: Դա զանգված է։ Ծրագրավորողը պետք է հայտարարի զանգվածի չափը: Եթե ծրագրավորողը հինգ տարրերի համար հայտարարում է ամբողջ թվերի զանգված, ապա հնարավոր չէ արժեք վերագրել հայտարարված չափից բարձր ցուցանիշին։ Հիշողության տեղաբաշխումը ֆիքսված է, և այն հնարավոր չէ փոխել գործարկման ժամանակ:Հիշողության բաշխման այլ եղանակ է հիշողության դինամիկ տեղաբաշխումը: Հիշողության դինամիկ տեղաբաշխումն օգնում է անհրաժեշտության դեպքում ավելի շատ հիշողություն հատկացնել և անհրաժեշտության դեպքում ազատել: Վերնագրի ֆայլն ունի չորս գործառույթ՝ դինամիկ հիշողության բաշխման համար: calloc-ը և malloc-ը նման երկու գործառույթ են: Calloc-ի և malloc-ի հիմնական տարբերությունն այն է, որ calloc-ը հատկացնում է հիշողությունը և նաև սկզբնավորում է հատկացված հիշողության բլոկները զրոյի, մինչդեռ malloc-ը հատկացնում է հիշողությունը, բայց չի նախաստորագրում այդ հատկացված հիշողությունը զրոյի: Caloc-ում բովանդակություն մուտք գործելը կտա զրո, բայց malloc-ը կտա աղբի արժեք:
Ի՞նչ է calloc-ը:
Հիշողության տեղաբաշխումը կատարող ծրագրերի համար հիշողություն հատկացնելու գործընթացն է: Երբեմն անհրաժեշտ է լինում փոխել հիշողության չափը։ Հետեւաբար, օգտագործվում է դինամիկ հիշողության բաշխում: Այն կատարվում է ցուցիչների միջոցով: Ցուցիչները հղման փոփոխականներ են, որոնք պահում են մեկ այլ փոփոխականի հասցեն:
Նկար 01. calloc և malloc
calloc նշանակում է «հարակից տեղաբաշխում»: Այն հատկացնում է նույն չափի հիշողության բազմաթիվ բլոկներ: Calloc-ի շարահյուսությունը հետևյալն է. Այն պահանջում է երկու փաստարկ. Դրանք բլոկների քանակն են և յուրաքանչյուր բլոկի չափը: Caloc ֆունկցիան վերադարձնում է դատարկ ցուցիչ, ուստի cast օպերատորն օգտագործվում է վերադարձված ցուցիչի տիպի համար՝ ըստ անհրաժեշտ տվյալների տեսակի:
voidcalloc (size_t num, size_t size);
Վերադարձեք ստորև պարզ C ծրագրին:
ներառել
ներառել
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf («Հիշողությունը հատկացված չէ»);
}
այլ{
printf («Հիշողությունը հատկացված է»);
}
վերադարձ 0;
}
Ըստ վերոնշյալ ծրագրի՝ հատկացվում է հիշողության հարակից բլոկ, որը կարող է պահել 20 տարր։ Յուրաքանչյուրը կունենա ամբողջ թվի չափ: sizeof(int)-ն օգտագործվում է, քանի որ ամբողջ թվի տեսակը տարբերվում է կոմպիլյատորից մինչև կոմպիլյատոր:
Եթե հիշողության բաշխումը հաջող է, այն կվերադարձնի հիշողության բլոկի հիմնական հասցեն: Դա նշանակում է, որ ptr ցուցիչն այժմ ցույց է տալիս այդ հիշողության բլոկի հիմնական հասցեն: Բոլոր հատկացված շրջանները սկզբնավորվում են զրոյի: Այն կտպագրի Հիշողության հատկացված հաղորդագրությունը: Եթե հիշողության բաշխումն անհաջող է, այն կվերադարձնի զրոյական ցուցիչը: Հետևաբար, այն կտպագրի Հիշողությունը հատկացված չէ հաղորդագրություն:
Ի՞նչ է մալոկը:
Malloc ֆունկցիան օգտագործվում է հիշողության մեջ բայթերի անհրաժեշտ քանակությունը հատկացնելու համար: Malloc-ի շարահյուսությունը հետևյալն է. Չափը ներկայացնում է պահանջվող հիշողությունը բայթերով:
void malloc(size_t_size);
Malloc ֆունկցիան վերադարձնում է դատարկ ցուցիչ, ուստի cast օպերատորն օգտագործվում է վերադարձված ցուցիչի տիպի համար՝ ըստ անհրաժեշտ տվյալների տեսակի:
Տե՛ս ստորև բերված պարզ C ծրագիրը malloc ֆունկցիայով:
ներառել
ներառել
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf («Հիշողությունը հատկացված չէ»);
}
այլ{
printf («Հիշողությունը հատկացված է»);
}
վերադարձ 0;
}
Համաձայն վերոնշյալ ծրագրի՝ կհատկացվի հիշողության բլոկ։ Սլաքը ցույց է տալիս հատկացված հիշողության մեկնարկային հասցեն: Վերադարձված ցուցիչը վերածվում է ամբողջ թվի տեսակի: Եթե հիշողությունը հատկացվի, այն կտպագրի «Հիշողությունը հատկացված է» հաղորդագրություն: Եթե հիշողությունը տեղաբաշխված չէ, ապա կվերադառնա զրոյական ցուցիչ: Հետևաբար, հիշողությունը հատկացված չէ, հաղորդագրությունը կտպվի:
Որո՞նք են նմանությունները calloc-ի և malloc-ի միջև:
- Այս երկու գործառույթներն էլ հայտարարված են վերնագրի ֆայլում: Դա գրադարանի վերնագրի ստանդարտ ֆայլն է:
- Երկու գործառույթներն էլ օգտագործվում են դինամիկ հիշողության բաշխման համար:
- Calloc-ի և malloc-ի կողմից վերադարձված ցուցիչը պետք է փոխանցվի հատուկ տեսակի:
- Հիշողության հաջող բաշխման դեպքում երկու գործառույթներն էլ կվերադարձնեն ցուցիչ՝ հիշողության բլոկի հիմնական հասցեով:
- Եթե հիշողության բաշխումն անհաջող է, ապա կվերադարձվի զրոյական ցուցիչ:
Ո՞րն է տարբերությունը calloc-ի և malloc-ի միջև:
calloc vs malloc |
|
calloc-ը C լեզվի stdlib.h վերնագրի ֆայլում դինամիկ հիշողության տեղաբաշխման ֆունկցիա է, որը հատկացնում է բայթերի որոշակի քանակ և զրոյականացնում դրանք: | malloc-ը C լեզվով stdlib.h վերնագրի ֆայլում դինամիկ հիշողության տեղաբաշխման ֆունկցիա է, որը հատկացնում է որոշակի քանակությամբ բայթ: |
Իմաստը | |
calloc-ը նշանակում է հարակից տեղաբաշխում: | malloc նշանակում է հիշողության բաշխում: |
Սինտաքս | |
calloc-ը հետևում է void calloc-ի նման շարահյուսությանը (size_t_num, size_t size); | malloc հետևում է void malloc(size_t_size);-ին նման շարահյուսության։ |
Փաստարկների քանակը | |
calloc-ը վերցնում է երկու արգումենտ: Դրանք մի շարք բլոկներ են և յուրաքանչյուր բլոկի չափ: | malloc-ը վերցնում է մեկ արգումենտ: Դա բայթերի քանակ է։ |
Արագություն | |
calloc-ը մի փոքր ավելի երկար է տևում, քան malloc-ը: Դա պայմանավորված է հատկացված հիշողությունը զրոյով սկզբնավորելու լրացուցիչ քայլով: | malloc-ն ավելի արագ է, քան calloc-ը: |
Ամփոփում – calloc vs malloc
Ստատիկ հիշողության բաշխման դեպքում, օրինակ, զանգվածների օգտագործմամբ, հիշողությունը ֆիքսված է: Եթե քիչ տարրեր են պահվում, ապա հիշողության մնացած մասը վատնում է: Այն կարող է նաև սխալներ առաջացնել, երբ հատկացված հիշողությունը փոքր է, քան պահանջվող հիշողությունը: Հետեւաբար, օգտագործվում է դինամիկ հիշողության բաշխում: C լեզվով calloc-ը և malloc-ը ապահովում են հիշողության դինամիկ տեղաբաշխում: Calloc-ի և malloc-ի միջև տարբերությունն այն է, որ calloc-ը հատկացնում է հիշողությունը և նաև սկզբնավորում է հատկացված հիշողության բլոկները զրոյի, մինչդեռ malloc-ը հատկացնում է հիշողությունը, բայց չի նախաստորագրում հիշողության բլոկները զրոյի: Malloc-ը վերցնում է երկու արգումենտ, մինչդեռ calloc-ը՝ երկու արգումենտ:
Ներբեռնեք calloc vs malloc-ի PDF-ը
Դուք կարող եք ներբեռնել այս հոդվածի PDF տարբերակը և օգտագործել այն անցանց նպատակներով՝ ըստ մեջբերումների: Խնդրում ենք ներբեռնել PDF տարբերակը այստեղ՝ տարբերությունը calloc-ի և malloc-ի միջև