Asosiy farq – calloc va malloc
Dasturlashda ma'lumotlarni saqlash kerak. Ma'lumotlar xotirada saqlanadi. Ushbu xotira joylari o'zgaruvchilar sifatida tanilgan. Har bir o'zgaruvchining o'ziga xos turi mavjud. Ular butun sonlar, suzuvchilar, juftliklar, belgilar va boshqalar bo'lishi mumkin. Shuningdek, bir xil turdagi elementlarning qat'iy o'lchamdagi ketma-ket to'plamini saqlashi mumkin bo'lgan ma'lumotlar tuzilmalari ham mavjud. Bu massiv. Dasturchi massiv hajmini e'lon qilishi kerak. Agar dasturchi besh element uchun butun sonlar massivini e'lon qilsa, e'lon qilingan o'lchamdan kattaroq indeksga qiymat berish mumkin emas. Xotirani ajratish aniqlangan va uni ish vaqtida o'zgartirib bo'lmaydi. Xotirani taqsimlashning boshqa usuli bu dinamik xotira ajratishdir. Dinamik xotira ajratish kerak bo'lganda ko'proq xotirani ajratishga va kerak bo'lganda bo'shatishga yordam beradi. Sarlavha fayli dinamik xotirani taqsimlash uchun to'rtta funktsiyaga ega. calloc va malloc - bu ikkita funktsiya. Calloc va malloc o'rtasidagi asosiy farq shundaki, calloc xotirani ajratadi va ajratilgan xotira bloklarini nolga tenglashtiradi, malloc esa xotirani ajratadi, lekin ajratilgan xotirani nolga qaytarmaydi. Calloc-dagi kontentga kirish nolga teng, lekin malloc axlat qiymatini beradi.
Kallok nima?
Xotira ajratish - bu bajarilayotgan dasturlar uchun xotirani belgilash jarayoni. Ba'zan xotira hajmini o'zgartirish kerak bo'ladi. Shuning uchun dinamik xotira ajratish qo'llaniladi. Ko'rsatkichlar yordamida amalga oshiriladi. Ko'rsatkichlar boshqa o'zgaruvchining manzilini saqlaydigan mos yozuvlar o'zgaruvchilari.
01-rasm: calloc va malloc
calloc “qoʻshni taqsimlash” degan maʼnoni anglatadi. U bir xil o'lchamdagi bir nechta xotira bloklarini ajratadi. Calloc uchun sintaksisi quyidagicha. Buning uchun ikkita argument kerak. Ular bloklar soni va har bir blokning o'lchamidir. Calloc funktsiyasi bekor ko'rsatkichni qaytaradi, shuning uchun kerakli ma'lumotlar turiga ko'ra qaytarilgan ko'rsatgich turi uchun cast operatori ishlatiladi.
voidcalloc(siz_t son, oʻlcham_t);
Quyidagi oddiy C dasturiga qarang.
shu jumladan
shu jumladan
int main(){
int ptr=(int) calloc(20, sizeof(int));
agar (ptr==NULL){
printf(“Xotira ajratilmagan”);
}
boshqa{
printf(“Xotira ajratilgan”);
}
qaytish 0;
}
Yuqoridagi dasturga koʻra, 20 ta elementni sigʻdira oladigan qoʻshni xotira bloki ajratilgan. Ularning har biri butun son o'lchamiga ega bo'ladi. Sizeof(int) butun son turi kompilyatordan kompilyatorga o‘zgargani uchun ishlatiladi.
Agar xotira taqsimoti muvaffaqiyatli boʻlsa, u xotira blokining asosiy manzilini qaytaradi. Bu shuni anglatadiki, ptr ko'rsatkichi endi ushbu xotira blokining asosiy manziliga ishora qilmoqda. Barcha ajratilgan hududlar nolga tenglashtiriladi. U Xotiraga ajratilgan xabarni chop etadi. Xotirani taqsimlash muvaffaqiyatsiz bo'lsa, u null ko'rsatkichni qaytaradi. Shuning uchun u "Xotira ajratilmagan" xabarini chop etadi.
Malloc nima?
Malloc funksiyasi xotirada kerakli bayt miqdorini ajratish uchun ishlatiladi. Malloc uchun sintaksisi quyidagicha. Hajmi kerakli xotirani baytlarda ifodalaydi.
void malloc(size_t_size);
Malloc funksiyasi bekor koʻrsatgichni qaytaradi, shuning uchun kerakli maʼlumotlar turiga koʻra qaytarilgan koʻrsatgich turi uchun cast operatori ishlatiladi.
Quyida malloc funksiyali oddiy C dasturiga qarang.
shu jumladan
shu jumladan
int main(){
int ptr=(int) malloc (10sizeof(int));
agar (ptr==NULL){
printf(“Xotira ajratilmagan”);
}
boshqa{
printf(“Xotira ajratilgan”);
}
qaytish 0;
}
Yuqoridagi dasturga muvofiq xotira bloki ajratiladi. Ko'rsatkich ajratilgan xotiraning boshlang'ich manziliga ishora qiladi. Qaytarilgan ko'rsatgich butun son turiga aylantiriladi. Xotira ajratilgan bo'lsa, xotira ajratilgan xabarni chop etadi. Agar xotira ajratilmagan bo'lsa, null ko'rsatgich qaytadi. Shuning uchun xotira ajratilmagan xabar chop etiladi.
Calloc va malloc oʻrtasidagi oʻxshashliklar qanday?
- Bu funksiyalarning ikkalasi ham sarlavha faylida e'lon qilingan. Bu standart kutubxona sarlavhasi fayli.
- Ikkala funksiya ham dinamik xotira ajratish uchun ishlatiladi.
- Calloc va malloc tomonidan qaytarilgan koʻrsatgich maʼlum turga oʻtkazilishi kerak.
- Muvaffaqiyatli xotira taqsimotida ikkala funksiya ham xotira blokining asosiy manzili bilan koʻrsatgichni qaytaradi.
- Agar xotira taqsimoti muvaffaqiyatsiz boʻlsa, null koʻrsatkich qaytariladi.
Calloc va malloc oʻrtasidagi farq nima?
calloc va malloc |
|
calloc - bu S tilidagi stdlib.h sarlavha faylida dinamik xotira ajratish funksiyasi boʻlib, maʼlum bir bayt sonini ajratadi va ularni nolga tenglashtiradi. | malloc - bu S tilidagi stdlib.h sarlavha faylida ma'lum bir bayt sonini ajratuvchi dinamik xotira ajratish funksiyasi. |
Ma'nosi | |
calloc qoʻshni ajratishni bildiradi. | malloc xotira ajratishni bildiradi. |
Sintaksis | |
calloc void calloc(size_t_num, size_t size); ga oʻxshash sintaksisga amal qiladi | malloc void malloc(size_t_size); ga oʻxshash sintaksisga amal qiladi. |
Argumentlar soni | |
calloc ikkita argument oladi. Ular bloklar soni va har bir blokning oʻlchamidir. | malloc bitta argumentni oladi. Bu bayt soni. |
Tezlik | |
calloc mallocdan ko'proq vaqt oladi. Buning sababi, ajratilgan xotirani nolga tushirishning qo'shimcha bosqichidir. | malloc kallokdan tezroq. |
Xulosa – calloc va malloc
Masivlardan foydalangan holda statik xotirani ajratishda xotira mustahkamlanadi. Agar bir nechta elementlar saqlansa, xotiraning qolgan qismi behuda ketadi. Ajratilgan xotira talab qilinadigan xotiradan kichik bo'lsa, u xatolarga olib kelishi mumkin. Shuning uchun dinamik xotira ajratish qo'llaniladi. C tilida calloc va malloc dinamik xotira ajratishni ta'minlaydi. Calloc va malloc o'rtasidagi farq shundaki, calloc xotirani ajratadi va ajratilgan xotira bloklarini nolga tenglashtiradi, malloc esa xotirani ajratadi, lekin xotira bloklarini nolga qaytarmaydi. Malloc ikkita argument oladi, calloc esa ikkita argument oladi.
Calloc vs malloc PDF formatini yuklab oling
Siz ushbu maqolaning PDF-versiyasini yuklab olishingiz va iqtibos keltirgan holda oflayn maqsadlarda foydalanishingiz mumkin. Iltimos, PDF versiyasini bu yerdan yuklab oling: calloc va malloc o'rtasidagi farq