Anahtar Farkı – calloc ve malloc
Programlamada veri depolamak gereklidir. Veriler bellekte saklanır. Bu bellek konumları değişkenler olarak bilinir. Her değişkenin belirli bir türü vardır. Tamsayılar, kayanlar, çiftler, karakterler vb. olabilirler. Aynı türden sabit boyutlu sıralı bir öğe koleksiyonunu depolayabilen veri yapıları da vardır. Bu bir dizidir. Programcı dizi boyutunu bildirmek zorundadır. Programcı beş eleman için bir tamsayı dizisi bildirirse, bir dizine bildirilen boyuttan daha yüksek bir değer atamak mümkün değildir. Bellek tahsisi sabittir ve çalışma zamanında değiştirilemez. Diğer bellek ayırma yöntemi, dinamik bellek ayırmadır. Dinamik bellek ayırma, gerektiğinde daha fazla bellek ayırmaya ve gerektiğinde serbest bırakmaya yardımcı olur. Başlık dosyasının dinamik bellek tahsisi için dört işlevi vardır. calloc ve malloc bu tür iki işlevdir. calloc ve malloc arasındaki temel fark, calloc'un belleği ayırması ve ayrıca ayrılan bellek bloklarını sıfıra başlatması, malloc'un belleği ayırması ancak ayrılan belleği sıfıra başlatmamasıdır. Calloc içindeki içeriğe erişmek sıfır verecek, ancak malloc bir çöp değeri verecek.
Calloc nedir?
Bellek ayırma, yürütülen programlar için bellek atama işlemidir. Bazen bellek boyutunu değiştirmek gerekir. Bu nedenle, dinamik bellek ayırma kullanılır. İşaretçiler kullanılarak yapılır. İşaretçiler, başka bir değişkenin adresini tutan referans değişkenlerdir.
Şekil 01: calloc ve malloc
calloc "bitişik tahsis" anlamına gelir. Aynı boyutta birden fazla bellek bloğu tahsis eder. calloc'un sözdizimi aşağıdaki gibidir. İki argüman alır. Bunlar blok sayısı ve her bloğun boyutudur. calloc işlevi bir geçersiz işaretçi döndürür, bu nedenle gerekli veri türüne göre işaretçi türünü döndürmek için bir yayın operatörü kullanılır.
voidcalloc(size_t num, size_t size);
Aşağıdaki basit C programına bakın.
dahil
dahil
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“Bellek tahsis edilmemiş”);
}
başka{
printf(“Bellek tahsis edildi”);
}
dönüş 0;
}
Yukarıdaki programa göre, 20 eleman tutabilen bitişik bir bellek bloğu tahsis edilmiştir. Her biri bir tamsayı boyutuna sahip olacaktır. Tamsayı türü derleyiciden derleyiciye değiştiği için sizeof(int) kullanılır.
Bellek ayırma başarılı olursa, bellek bloğunun temel adresini döndürür. Bu, ptr işaretçisinin şimdi o bellek bloğunun temel adresini gösterdiği anlamına gelir. Tahsis edilen tüm bölgeler sıfır olarak başlatılır. Ayrılan Bellek mesajını yazdıracaktır. Bellek ayırma başarısız olursa, boş göstericiyi döndürür. Bu nedenle, Bellek tahsis edilmedi mesajını yazdıracaktır.
malloc nedir?
malloc işlevi, bellekte gerekli miktarda bayt tahsis etmek için kullanılır. malloc'un sözdizimi aşağıdaki gibidir. Boyut, gerekli belleği bayt cinsinden temsil eder.
void malloc(size_t_size);
malloc işlevi bir geçersiz işaretçi döndürür, bu nedenle gerekli veri türüne göre işaretçi türünü döndürmek için bir yayın operatörü kullanılır.
malloc işlevli aşağıdaki basit C programına bakın.
dahil
dahil
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“Bellek tahsis edilmemiş”);
}
başka{
printf(“Bellek tahsis edildi”);
}
dönüş 0;
}
Yukarıdaki programa göre, bellek bloğu tahsis edilecektir. İşaretçi, ayrılan belleğin başlangıç adresini gösteriyor. Döndürülen işaretçi bir tamsayı türüne dönüştürülür. Bellek tahsis edilmişse, bellek tahsis edildi mesajını yazdıracaktır. Bellek tahsis edilmemişse, bir boş gösterici dönecektir. Bu nedenle bellek ayrılmadı mesajı yazdırılır.
Calloc ve malloc arasındaki benzerlikler nelerdir?
- Bu işlevlerin ikisi de başlık dosyasında bildirilir. Standart kitaplık başlık dosyasıdır.
- Her iki işlev de dinamik bellek ayırma için kullanılır.
- Calloc ve malloc tarafından döndürülen işaretçi belirli bir türe dönüştürülmelidir.
- Başarılı bellek tahsisinde, her iki işlev de bellek bloğunun temel adresini içeren bir işaretçi döndürür.
- Bellek ayırma başarısız olursa, bir boş gösterici döndürülür.
Calloc ve malloc arasındaki fark nedir?
calloc vs malloc |
|
calloc, C dili stdlib.h başlık dosyasında belirli sayıda bayt tahsis eden ve bunları sıfıra başlatan dinamik bellek ayırma işlevidir. | malloc, belirli sayıda bayt ayıran C dili stdlib.h başlık dosyasında dinamik bellek ayırma işlevidir. |
Anlamı | |
calloc bitişik tahsis anlamına gelir. | malloc, bellek ayırma anlamına gelir. |
Sözdizimi | |
calloc void calloc(size_t_num, size_t size); ile benzer bir sözdizimi izler | malloc void malloc(size_t_size);'a benzer bir sözdizimi izler. |
Argüman Sayısı | |
calloc iki bağımsız değişken alır. Bunlar blok sayısı ve her bloğun boyutudur. | malloc bir argüman alır. Bu bir bayt sayısıdır. |
Hız | |
calloc, malloc'tan biraz daha uzun sürer. Bunun nedeni, ayrılan belleği sıfırla başlatma ek adımıdır. | malloc calloc'tan daha hızlıdır. |
Özet – calloc ve malloc
Dizileri kullandığımız gibi statik bellek tahsisinde, bellek sabittir. Birkaç öğe saklanırsa, belleğin geri kalanı boşa harcanır. Ayrılan bellek gerekli bellekten küçük olduğunda da hatalara neden olabilir. Bu nedenle, dinamik bellek ayırma kullanılır. C dilinde calloc ve malloc, dinamik bellek tahsisi sağlar. calloc ve malloc arasındaki fark, calloc'un belleği ayırması ve ayrıca ayrılan bellek bloklarını sıfıra başlatması, malloc'un belleği ayırması ancak bellek bloklarını sıfıra başlatmamasıdır. Calloc iki argüman alırken Malloc iki argüman alır.
Calloc ve malloc karşılaştırmasının PDF'sini indirin
Bu makalenin PDF sürümünü indirebilir ve alıntı notuna göre çevrimdışı amaçlarla kullanabilirsiniz. Lütfen PDF sürümünü buradan indirin: calloc ve malloc arasındaki fark