Əsas Fərq – calloc vs malloc
Proqramlaşdırmada verilənləri saxlamaq lazımdır. Məlumatlar yaddaşda saxlanılır. Bu yaddaş yerləri dəyişənlər kimi tanınır. Hər bir dəyişənin müəyyən bir növü var. Onlar tam ədədlər, üzənlər, cütlər, simvollar və s. ola bilər. Eyni tipli elementlərin sabit ölçülü ardıcıl kolleksiyasını saxlaya bilən verilənlər strukturları da var. Bu bir massivdir. Proqramçı massivin ölçüsünü elan etməlidir. Proqramçı beş element üçün tam ədədlər massivi elan edərsə, elan edilmiş ölçüdən yuxarı indeksə qiymət təyin etmək mümkün deyil. Yaddaşın ayrılması sabitdir və onu işləmə zamanı dəyişdirmək mümkün deyil. Yaddaşın bölüşdürülməsinin digər üsulu dinamik yaddaş bölgüsüdür. Dinamik yaddaş bölgüsü tələb olunduqda daha çox yaddaş ayırmağa və lazım olduqda buraxmağa kömək edir. Başlıq faylı dinamik yaddaşın ayrılması üçün dörd funksiyaya malikdir. calloc və malloc iki belə funksiyadır. Calloc və malloc arasındakı əsas fərq ondan ibarətdir ki, calloc yaddaşı ayırır və həmçinin ayrılmış yaddaş bloklarını sıfıra endirir, malloc isə yaddaşı ayırır, lakin bu ayrılmış yaddaşı sıfıra endirmir. Calloc-dakı məzmuna daxil olmaq sıfır verəcək, lakin malloc zibil dəyəri verəcək.
Kallok nədir?
Yaddaşın ayrılması icra olunan proqramlar üçün yaddaşın təyin edilməsi prosesidir. Bəzən yaddaşın ölçüsünü dəyişdirmək lazımdır. Buna görə dinamik yaddaşın ayrılmasından istifadə olunur. Göstəricilərdən istifadə etməklə həyata keçirilir. Göstəricilər başqa dəyişənin ünvanını saxlayan istinad dəyişənləridir.
Şəkil 01: calloc və malloc
calloc "bitişik ayırma" deməkdir. Eyni ölçülü yaddaşın bir neçə blokunu ayırır. Calloc üçün sintaksis aşağıdakı kimidir. Bunun üçün iki arqument lazımdır. Bunlar blokların sayı və hər blokun ölçüsüdür. Calloc funksiyası boş göstərici qaytarır, ona görə də tələb olunan məlumat növünə uyğun olaraq qaytarılan göstərici növü üçün yayım operatoru istifadə olunur.
voidcalloc(ölçü_t ədəd, ölçü_t ölçüsü);
Aşağıdakı sadə C proqramına baxın.
daxildir
daxildir
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf("Yaddaş ayrılmayıb");
}
başqa{
printf("Yaddaş ayrılıb");
}
qayıt 0;
}
Yuxarıdakı proqrama əsasən, 20 elementi saxlaya bilən bitişik yaddaş bloku ayrılmışdır. Hər birinin ölçüsü tam ədəd olacaq. Tam ədəd növü kompilyatordan kompilyatora dəyişdiyi üçün sizeof(int) istifadə olunur.
Yaddaşın ayrılması uğurlu olarsa, o, yaddaş blokunun əsas ünvanını qaytaracaq. Bu o deməkdir ki, ptr göstərici indi həmin yaddaş blokunun əsas ünvanını göstərir. Bütün ayrılmış bölgələr sıfıra endirilir. O, Yaddaş Ayrılmış mesajını çap edəcək. Yaddaşın ayrılması uğursuz olarsa, o, null göstəricini qaytaracaq. Buna görə də, o, Yaddaş ayrılmadı mesajını çap edəcək.
malloc nədir?
Malloc funksiyası yaddaşda tələb olunan bayt miqdarını ayırmaq üçün istifadə olunur. malloc üçün sintaksis aşağıdakı kimidir. Ölçü tələb olunan yaddaşı baytlarla ifadə edir.
void malloc(size_t_size);
Malloc funksiyası boş göstərici qaytarır, ona görə də tələb olunan məlumat növünə uyğun olaraq qaytarılan göstərici növü üçün yayım operatoru istifadə olunur.
Aşağıdakı sadə C proqramına malloc funksiyası ilə baxın.
daxildir
daxildir
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf("Yaddaş ayrılmayıb");
}
başqa{
printf("Yaddaş ayrılıb");
}
qayıt 0;
}
Yuxarıdakı proqrama uyğun olaraq yaddaş bloku ayrılacaq. Göstərici ayrılmış yaddaşın başlanğıc ünvanını göstərir. Qaytarılan göstərici tam ədədə çevrilir. Yaddaş ayrılıbsa, yaddaş ayrıldı mesajını çap edəcək. Yaddaş ayrılmırsa, null göstərici qayıdacaq. Buna görə yaddaş ayrılmayıb mesajı çap olunacaq.
Calloc və malloc arasında hansı oxşarlıqlar var?
- Bu funksiyaların hər ikisi başlıq faylında elan edilmişdir. Bu, standart kitabxana başlıq faylıdır.
- Hər iki funksiya dinamik yaddaş bölgüsü üçün istifadə olunur.
- Calloc və malloc tərəfindən qaytarılan göstərici xüsusi tipə köçürülməlidir.
- Uğurlu yaddaş ayrılması zamanı hər iki funksiya yaddaş blokunun əsas ünvanı ilə göstərici qaytaracaq.
- Yaddaş bölgüsü uğursuz olarsa, null göstərici qaytarılacaq.
Kallok və malloc arasındakı fərq nədir?
calloc vs malloc |
|
calloc C dilində stdlib.h başlıq faylında dinamik yaddaş bölgüsü funksiyasıdır ki, o, müəyyən sayda bayt ayırır və onları sıfıra endirir. | malloc müəyyən sayda bayt ayıran C dilində stdlib.h başlıq faylında dinamik yaddaş bölgüsü funksiyasıdır. |
Mənası | |
calloc bitişik ayırma deməkdir. | malloc yaddaş bölgüsü deməkdir. |
Sintaksis | |
calloc void calloc(size_t_num, size_t size); ilə oxşar sintaksisə əməl edir | malloc void malloc(size_t_size); kimi sintaksisə əməl edir. |
Arqumentlərin sayı | |
calloc iki arqument alır. Onlar blokların sayı və hər blokun ölçüsüdür. | malloc bir arqument götürür. Bu, bayt sayıdır. |
Sürət | |
calloc malloc-dan bir qədər uzun çəkir. Bunun səbəbi ayrılmış yaddaşın sıfıra sıfırlanması ilə bağlı əlavə addımdır. | malloc calloc-dan daha sürətlidir. |
Xülasə – calloc vs malloc
Massivlərdən istifadə etdiyimiz statik yaddaş ayrılması zamanı yaddaş sabitlənir. Bir neçə element saxlanılırsa, yaddaşın qalan hissəsi boş yerə sərf olunur. Ayrılmış yaddaş tələb olunan yaddaşdan kiçik olduqda o, həmçinin səhvlərə səbəb ola bilər. Buna görə dinamik yaddaşın ayrılmasından istifadə olunur. C dilində calloc və malloc dinamik yaddaş ayrılmasını təmin edir. Calloc və malloc arasındakı fərq ondan ibarətdir ki, calloc yaddaş ayırır və həmçinin ayrılmış yaddaş bloklarını sıfıra endirir, malloc isə yaddaşı ayırır, lakin yaddaş bloklarını sıfıra endirmir. Malloc iki arqument, calloc isə iki arqument qəbul edir.
Calloc vs malloc-un PDF faylını endirin
Bu məqalənin PDF versiyasını yükləyə və sitat qeydinə əsasən onu oflayn məqsədlər üçün istifadə edə bilərsiniz. Zəhmət olmasa PDF versiyasını buradan endirin: calloc və malloc arasındakı fərq