Негізгі айырмашылық – calloc пен malloc
Бағдарламалауда деректерді сақтау қажет. Деректер жадта сақталады. Бұл жад орындары айнымалылар ретінде белгілі. Әрбір айнымалының белгілі бір түрі болады. Олар бүтін сандар, қалқымалы сандар, қостар, таңбалар және т.б. болуы мүмкін. Сондай-ақ, бір типті элементтердің тіркелген өлшемді дәйекті жинағын сақтай алатын деректер құрылымдары бар. Бұл массив. Бағдарламашы массив өлшемін жариялауы керек. Егер бағдарламашы бес элемент үшін бүтін сандар массивін жарияласа, жарияланған өлшемнен жоғары индекске мән тағайындау мүмкін емес. Жадты бөлу бекітілген және оны орындау уақытында өзгерту мүмкін емес. Жадты бөлудің басқа әдісі - динамикалық жадты бөлу. Динамикалық жадты бөлу қажет кезде көбірек жадты бөлуге және қажет болғанда босатуға көмектеседі. Тақырып файлында динамикалық жадты бөлуге арналған төрт функция бар. calloc және malloc - осындай екі функция. Calloc пен malloc арасындағы негізгі айырмашылық мынада: calloc жадты бөледі, сонымен қатар бөлінген жад блоктарын нөлге дейін инициализациялайды, ал malloc жадты бөледі, бірақ бөлінген жадты нөлге дейін инициализацияламайды. Calloc ішіндегі мазмұнға қатынасу нөл береді, бірақ malloc қоқыс мәнін береді.
Каллок дегеніміз не?
Жадты бөлу – орындалатын бағдарламалар үшін жадты тағайындау процесі. Кейде жад көлемін өзгерту қажет. Сондықтан динамикалық жадты бөлу қолданылады. Ол көрсеткіштер арқылы орындалады. Көрсеткіштер - басқа айнымалының мекенжайын ұстайтын анықтамалық айнымалылар.
01-сурет: calloc және malloc
calloc «бірлескен бөлу» дегенді білдіреді. Ол өлшемдері бірдей жадтың бірнеше блоктарын бөледі. Calloc синтаксисі келесідей. Ол үшін екі аргумент қажет. Олар блоктардың саны және әрбір блоктың өлшемі. Calloc функциясы бос көрсеткішті қайтарады, сондықтан қажетті деректер түріне сәйкес қайтарылатын көрсеткіш түрі үшін трансляциялау операторы пайдаланылады.
voidcalloc(өлшем_т сан, өлшем_т өлшем);
Төмендегі қарапайым C бағдарламасын қараңыз.
қосу
қосу
int main(){
int ptr=(int) calloc(20, sizeof(int));
егер (ptr==NULL){
printf («Жад бөлінбеген»);
}
басқа{
printf («Жад бөлінген»);
}
қайтару 0;
}
Жоғарыдағы бағдарламаға сәйкес 20 элементті сақтай алатын жадтың сабақтас блогы бөлінген. Әрқайсысының өлшемі бүтін санға ие болады. sizeof(int) пайдаланылады, себебі бүтін сан түрі компилятордан компиляторға дейін өзгереді.
Егер жадты бөлу сәтті болса, ол жад блогының негізгі мекенжайын қайтарады. Бұл ptr көрсеткіші қазір сол жад блогының негізгі мекенжайын көрсетіп тұрғанын білдіреді. Барлық бөлінген аймақтар нөлге дейін инициализацияланған. Ол жад бөлінген хабарды басып шығарады. Жадты бөлу сәтсіз болса, ол нөлдік көрсеткішті қайтарады. Сондықтан ол «Жад бөлінбеген» хабарын басып шығарады.
Malloc дегеніміз не?
Malloc функциясы жадтағы байттардың қажетті көлемін бөлу үшін пайдаланылады. malloc синтаксисі келесідей. Өлшем қажетті жадты байтпен көрсетеді.
void malloc(size_t_size);
Malloc функциясы жарамсыз көрсеткішті қайтарады, сондықтан қажетті деректер түріне сәйкес қайтарылатын көрсеткіш түрі үшін трансляциялау операторы пайдаланылады.
Төмендегі malloc функциясы бар қарапайым C бағдарламасын қараңыз.
қосу
қосу
int main(){
int ptr=(int) malloc (10sizeof(int));
егер (ptr==NULL){
printf («Жад бөлінбеген»);
}
басқа{
printf («Жад бөлінген»);
}
қайтару 0;
}
Жоғарыдағы бағдарламаға сәйкес жад блогы бөлінеді. Көрсеткіш бөлінген жадтың бастапқы мекенжайын көрсетеді. Қайтарылған көрсеткіш бүтін түрге түрлендіріледі. Жад бөлінсе, ол жад бөлінді хабарын басып шығарады. Жад бөлінбесе, нөлдік көрсеткіш қайтарылады. Сондықтан жад бөлінбейді хабар басып шығарылады.
Каллок пен mallocтың қандай ұқсастықтары бар?
- Бұл функциялардың екеуі де тақырып файлында жарияланған. Бұл стандартты кітапхана тақырыбы файлы.
- Екі функция да динамикалық жадты бөлу үшін пайдаланылады.
- Calloc және malloc арқылы қайтарылған көрсеткіш арнайы түрге шығарылуы керек.
- Жадты сәтті бөлу кезінде екі функция да жад блогының негізгі мекенжайы бар көрсеткішті қайтарады.
- Егер жадты бөлу сәтсіз болса, нөлдік көрсеткіш қайтарылады.
Каллок пен mallocтың айырмашылығы неде?
calloc және malloc |
|
calloc – белгілі бір байт санын бөлетін және оларды нөлге теңестіретін C тіліндегі stdlib.h тақырып файлындағы динамикалық жадты бөлу функциясы. | malloc - белгілі бір байт санын бөлетін C тіліндегі stdlib.h тақырып файлындағы динамикалық жадты бөлу функциясы. |
Мағына | |
calloc үзіліссіз бөлуді білдіреді. | malloc жад бөлуді білдіреді. |
Синтаксис | |
calloc void calloc(өлшем_t_num, size_t өлшемі); дегенге ұқсас синтаксиске сәйкес келеді | malloc void malloc(size_t_size); синтаксисі бойынша жүреді. |
Аргументтер саны | |
calloc екі аргумент алады. Олар блоктардың саны және әр блоктың өлшемі. | malloc бір аргумент алады. Бұл байт саны. |
Жылдам | |
қоңырау malloc-тан сәл ұзағырақ уақыт алады. Бұл бөлінген жадты нөлге баптандырудың қосымша қадамына байланысты. | malloc каллокқа қарағанда жылдамырақ. |
Қорытынды – calloc және malloc
Массивтерді пайдаланатын статикалық жадты бөлуде жад бекітілген. Егер бірнеше элементтер сақталса, жадтың қалған бөлігі босқа кетеді. Бөлінген жад қажетті жадтан аз болған кезде ол қателерді тудыруы мүмкін. Сондықтан динамикалық жадты бөлу қолданылады. Си тілінде calloc және malloc динамикалық жадты бөлуді қамтамасыз етеді. Calloc пен malloc арасындағы айырмашылық мынада: calloc жадты бөледі, сонымен қатар бөлінген жад блоктарын нөлге дейін инициализациялайды, ал malloc жадты бөледі, бірақ жад блоктарын нөлге дейін инициализацияламайды. Malloc екі аргумент, ал calloc екі аргумент қабылдайды.
Calloc vs malloc PDF файлын жүктеп алу
Сіз осы мақаланың PDF нұсқасын жүктеп алып, оны сілтеме жазбасына сәйкес офлайн мақсаттарда пайдалана аласыз. PDF нұсқасын мына жерден жүктеп алыңыз: calloc пен malloc арасындағы айырмашылық