Үндсэн ялгаа – calloc ба malloc
Програмчлалд өгөгдөл хадгалах шаардлагатай. Өгөгдөл нь санах ойд хадгалагддаг. Эдгээр санах ойн байршлыг хувьсагч гэж нэрлэдэг. Хувьсагч бүр тодорхой төрөлтэй. Эдгээр нь бүхэл тоо, хөвөгч, давхар, тэмдэгт гэх мэт байж болно. Мөн ижил төрлийн элементүүдийн тогтмол хэмжээтэй дараалсан цуглуулгыг хадгалах боломжтой өгөгдлийн бүтэц байдаг. Энэ бол массив юм. Программист массивын хэмжээг зарлах ёстой. Хэрэв програмист таван элементийн бүхэл тоон массив зарлавал зарласан хэмжээнээс өндөр индекст утга оноох боломжгүй. Санах ойн хуваарилалт нь тогтмол бөгөөд түүнийг ажиллуулах үед өөрчлөх боломжгүй. Санах ойг хуваарилах өөр арга бол динамик санах ойн хуваарилалт юм. Динамик санах ойн хуваарилалт нь шаардлагатай үед илүү их санах ойг хуваарилж, шаардлагатай үед суллахад тусалдаг. Толгой файл нь динамик санах ойг хуваарилах дөрвөн функцтэй. calloc болон malloc нь ийм хоёр функц юм. Calloc болон malloc хоёрын гол ялгаа нь calloc нь санах ойг хуваарилж, мөн хуваарилагдсан санах ойн блокуудыг тэг болгон эхлүүлдэг бол malloc нь санах ойг хуваарилдаг боловч хуваарилагдсан санах ойг тэг болгож эхлүүлдэггүй. Calloc дахь контентод хандах нь тэг өгөх боловч malloc нь хог хаягдлын утгыг өгөх болно.
Каллок гэж юу вэ?
Санах ойн хуваарилалт нь ажиллаж байгаа програмуудад санах ой хуваарилах үйл явц юм. Заримдаа санах ойн хэмжээг өөрчлөх шаардлагатай болдог. Тиймээс динамик санах ойн хуваарилалтыг ашигладаг. Үүнийг заагч ашиглан хийдэг. Заагч нь өөр хувьсагчийн хаягийг агуулсан лавлагаа хувьсагч юм.
Зураг 01: calloc болон malloc
calloc нь "зэргэлдээ хуваарилалт" гэсэн утгатай. Энэ нь ижил хэмжээтэй олон санах ойн блокуудыг хуваарилдаг. Calloc-ийн синтакс дараах байдалтай байна. Үүнд хоёр аргумент хэрэгтэй. Эдгээр нь блокуудын тоо, блок бүрийн хэмжээ юм. Calloc функц нь хүчингүй заагчийг буцаадаг тул шаардлагатай өгөгдлийн төрлөөс хамааран заагч төрлийг буцаахад cast операторыг ашигладаг.
voidcalloc(хэмжээ_t тоо, хэмжээ_t хэмжээ);
Доорх энгийн С програмыг үзнэ үү.
оруулах
оруулах
int main(){
int ptr=(int) calloc(20, sizeof(int));
хэрэв (ptr==NULL){
printf("Санах ой хуваарилагдаагүй");
}
өөр{
printf("Санах ой хуваарилагдсан");
}
0 буцах;
}
Дээрх программын дагуу 20 элементийг багтаах санах ойн залгаа блок хуваарилагдсан. Тус бүр нь бүхэл тооны хэмжээтэй байна. Бүхэл тооны төрөл нь хөрвүүлэгч бүрээс хамаарч өөр өөр байдаг тул sizeof(int) ашигладаг.
Хэрэв санах ойн хуваарилалт амжилттай бол санах ойн блокийн үндсэн хаягийг буцаана. Энэ нь одоо ptr заагч нь санах ойн блокийн үндсэн хаягийг зааж байна гэсэн үг юм. Бүх хуваарилагдсан бүсүүдийг тэг болгож эхлүүлсэн. Энэ нь Санах ойд хуваарилагдсан мессежийг хэвлэх болно. Хэрэв санах ойн хуваарилалт амжилтгүй болвол тэг заагчийг буцаана. Тиймээс энэ нь Санах ой хуваарилагдаагүй гэсэн мессежийг хэвлэх болно.
Malloc гэж юу вэ?
Malloc функц нь санах ойд шаардлагатай байтыг хуваарилахад ашиглагддаг. malloc-ийн синтакс нь дараах байдалтай байна. Хэмжээ нь шаардлагатай санах ойг байтаар илэрхийлнэ.
void malloc(t_size);
Malloc функц нь хүчингүй заагчийг буцаадаг тул шаардлагатай өгөгдлийн төрлөөс хамааран заагч төрлийг буцаахад cast операторыг ашигладаг.
Malloc функцтэй доорх энгийн C програмыг үзнэ үү.
оруулах
оруулах
int main(){
int ptr=(int) malloc (10sizeof(int));
хэрэв (ptr==NULL){
printf("Санах ой хуваарилагдаагүй");
}
өөр{
printf("Санах ой хуваарилагдсан");
}
0 буцах;
}
Дээрх программын дагуу санах ойн блок хуваарилагдана. Заагч нь хуваарилагдсан санах ойн эхлэл хаягийг зааж байна. Буцаагдсан заагчийг бүхэл тоон төрөл рүү хөрвүүлнэ. Хэрэв санах ой хуваарилагдсан бол санах ой хуваарилагдсан гэсэн мессежийг хэвлэх болно. Хэрэв санах ой хуваарилагдаагүй бол null заагч буцаж ирнэ. Тиймээс санах ой хуваарилагдаагүй гэсэн мессеж хэвлэгдэх болно.
Каллок болон malloc хоёрын ижил төстэй талууд юу вэ?
- Энэ хоёр функцийг толгой файлд зарласан. Энэ нь номын сангийн стандарт толгой файл юм.
- Хоёр функцийг динамик санах ойн хуваарилалтад ашигладаг.
- Calloc болон malloc-ийн буцаасан заагчийг тодорхой төрөлд оруулах ёстой.
- Санах ойг амжилттай хуваарилснаар хоёр функц нь санах ойн блокийн үндсэн хаягтай заагчийг буцаана.
- Хэрэв санах ойн хуваарилалт амжилтгүй болбол null заагчийг буцаана.
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
Массив ашигладаг статик санах ойн хуваарилалтад санах ой нь тогтмол байдаг. Хэрэв цөөн тооны элемент хадгалагдсан бол санах ойн үлдсэн хэсэг нь дэмий үрэгдэх болно. Хуваарилагдсан санах ой нь шаардлагатай санах ойноос бага байх үед энэ нь алдаа үүсгэж болзошгүй. Тиймээс динамик санах ойн хуваарилалтыг ашигладаг. Си хэл дээр calloc болон malloc нь санах ойн динамик хуваарилалтыг хангадаг. Calloc болон malloc хоёрын ялгаа нь calloc нь санах ойг хуваарилж, мөн хуваарилагдсан санах ойн блокуудыг тэг болгож эхлүүлдэг бол malloc нь санах ойг хуваарилдаг боловч санах ойн блокуудыг тэг болгож эхлүүлдэггүй. Malloc хоёр аргумент авдаг бол calloc хоёр аргумент авдаг.
Calloc vs malloc-н PDF файлыг татаж авах
Та энэ нийтлэлийн PDF хувилбарыг татаж аваад офлайн зорилгоор ашиглах боломжтой. PDF хувилбарыг эндээс татаж авна уу: Calloc болон malloc хоёрын ялгаа