Malloc ve calloc arasındaki farkı öğrenmeden önce öğrenelim-
Dinamik Bellek Tahsisi nedir?
Dinamik bellek ayırma, çalışma zamanında bellek ayırma işlemidir. Bellek ayırmak ve programın yürütülmesi sırasında serbest bırakmak için kullanılabilen calloc (), free (), realloc () ve malloc () olmak üzere dört kütüphane rutini vardır. Bu yordamlar, stdlib.h adlı başlık dosyasında tanımlanır.
Malloc () nedir?
Dinamik olarak bir bellek bloğu tahsis etmek için kullanılan bir fonksiyondur. Belirtilen boyutta bellek alanı ayırır ve boş göstericiyi bellek konumuna işaret eder.
Döndürülen işaretçi genellikle void tipindedir. Bu, herhangi bir işaretçiye malloc işlevi atayabileceğimiz anlamına gelir. Malloc'un tam biçimi bellek ayırmadır.
Bu eğitimde şunları öğreneceksiniz:
- Dinamik Bellek Tahsisi nedir?
- Malloc () nedir?
- Calloc () nedir?
- Malloc () neden kullanılıyor?
- Calloc () neden kullanılıyor?
- Malloc sözdizimi ()
- Calloc sözdizimi ()
- C'de malloc () örneği
- C calloc () örneği
- Calloc () ve Malloc () Arasındaki Fark
Calloc () nedir?
Calloc () işlevi, birden çok bellek bloğunu ayırmak için kullanılır. Belleği diziler ve yapılar gibi karmaşık veri yapılarına ayırmak için kullanılan dinamik bir bellek ayırma işlevidir. Bu işlev belirtildiği gibi yeterli alan ayıramazsa, boş gösterici döndürür. Calloc işlevinin tam biçimi bitişik ayırmadır.
Malloc () neden kullanılıyor?
Malloc () kullanmanın nedenleri şunlardır
- Çalışma zamanında bellek ayırmanız gerektiğinde malloc () kullanmalısınız.
- Mevcut bellek bloğunun yürütülmesinin ötesinde olması gereken nesneleri ayırmanız gerektiğinde malloc kullanmalısınız.
- Bu yığının boyutundan daha büyük bellek ayırmanız gerekiyorsa malloc () öğesini seçin.
- İmleci, ayrılmış alanın ilk baytına döndürür.
- Geliştiricilerin, tam olarak gerektiği kadar bellek ayırmasını sağlar.
- Bu işlev, yığından bir bellek bloğu boyutu bayt ayırır.
Calloc () neden kullanılıyor?
Calloc () kullanmanın nedenleri
- Ayrılan belleği sıfıra ayarlamanız gerektiğinde.
- Bellek yığınına erişmek için bir işaretçi döndüren calloc'u kullanabilirsiniz.
- Belleğe bir işaretçi döndürmek için öğeleri sıfıra başlatmanız gerektiğinde kullanılır.
- Malloc () ile mümkün olan taşmayı önlemek için
- Zaten sıfırlandığı bilinen bir sayfayı istemek için calloc () kullanın.
Malloc sözdizimi ()
İşte malloc () sözdizimi
ptr = (cast_type *) malloc (byte_size);
Yukarıdaki sözdiziminde, ptr bir cast_type göstericisidir. Malloc işlevi, ayrılan byte_size belleğine bir işaretçi döndürür.
Example: ptr = (int *) malloc (50)
Bu ifade başarıyla yürütüldüğünde, 50 baytlık bir hafıza alanı ayrılır. Ayrılmış alanın ilk baytının adresi int türündeki "ptr" işaretçisine atanır.
Calloc sözdizimi ()
İşte malloc () sözdizimi
ptr = (cast_type *) calloc (n, size);
Yukarıdaki sözdizimi, aynı boyutta n bellek bloğunu ayırmak için kullanılır. Bellek alanı tahsis edildikten sonra, tüm baytlar sıfır olarak başlatılır. Şu anda ayrılan bellek alanının ilk baytında olan işaretçi döndürülür.
C'de malloc () örneği
Aşağıdaki kodda, sizeof (* ptr), 15 tamsayıdan oluşan bir bellek bloğu tahsis etmek için kullanılır. Printf ifadesinde 6. tamsayının değerini buluyoruz.
#include#include int main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}
Çıktı:
6. tamsayının değeri 480
C calloc () örneği
Aşağıdaki C dili programı ilk on terimin toplamını hesaplar. İşaretçi değeri null ise, bellek alanı ayrılmayacaktır.
For döngüsü, bir "i" değişkeninin değerini yinelemek ve toplamı yazdırmak için kullanılır. Son olarak, işaretçiyi serbest bırakmak için işlevsiz kullanılır.
#include#include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}
Çıktı:
İlk 10 terimin sıra toplamını oluşturma ve hesaplama n Sum = 45
Calloc () ve Malloc () Arasındaki Fark
Herer, malloc () ve calloc () arasındaki önemli farklardır:
malloc () | calloc () |
Malloc () işlevi, kullanıcı tarafından belirtilen boyutta tek bir bellek bloğu oluşturacaktır. | Calloc () işlevi, bir değişken için birden çok bellek bloğu atayabilir. |
Malloc işlevi çöp değeri içeriyor. | Bir calloc işlevi tarafından ayrılan bellek bloğu her zaman sıfır olarak başlatılır. |
Argüman sayısı 2'dir. | Argüman sayısı 1'dir. |
Calloc, malloc'tan daha yavaştır. | Malloc, calloc'tan daha hızlı. |
Calloc ile karşılaştırıldığında güvenli değildir. | Malloc'a göre kullanımı güvenlidir. |
Zaman verimliliği calloc () 'dan daha yüksektir. | Zaman verimliliği malloc () 'dan daha düşüktür. |
Malloc () işlevi yalnızca başlangıç adresini döndürür ve onu sıfır yapmaz. | Adresi tahsis etmeden önce Calloc () fonksiyonu başlangıç adresini döndürür ve onu sıfır yapar. |
Hafızayı ilk kullanıma hazırlamaz. | Hafıza başlatma işlemi gerçekleştirir. |
ANAHTAR FARKLAR:
- malloc () işlevi sadece başlangıç adresini döndürür ve onu sıfır yapmaz, calloc () işlevi başlangıç adresini döndürür ve onu sıfır yapar.
- Malloc fonksiyonunda argüman sayısı 2 iken calloc fonksiyonunda argüman sayısı 1'dir.
- malloc () zaman verimliliği calloc () 'dan daha yüksek iken malloc () calloc () ile karşılaştırıldığında güvenli değildir
- malloc belleği başlatmazken calloc bellek başlatmayı gerçekleştirir.