Malloc ve Yeni
Bir bilgisayar programcısı kiralamak için en yaygın görüşme sorularından biri, başvuru sahibi / bilgisayar programcısı için malloc ve yeni arasındaki farkları açıklamaktır. Hem malloc hem de new, bilgisayar dili alanında bulunur ve genellikle bilgisayar programcıları tarafından dinamik bellek ayırma için kullanılır.
İkisi arasındaki temel fark, malloc'un C dilinde mevcut olmasıdır, yeni ise C ++ dilinin belirli bir özelliğidir. Malloc aynı zamanda bir işlevdir (programcılar için yürütülmesi biraz zaman gerektirir), yeni ise bir operatör programıdır (yürütme süresini kısaltır). Bu operatörün yeni bir yararıdır, çünkü gerçek zamanlı programlama yapan programcıların kullanmak için en hızlı yöntemi seçmeleri gerekir.
Malloc fonksiyonunun aksine yeni operatör tip güvenlidir.
İşlev malloc, C dili için kütüphane işlevidir. Tek yaptığı bellek ayırmak ve ona bir işaretçi döndürmektir. Öte yandan, yeni operatör dil düzeyinde bir yapıdır ve görevi bellek ayırarak ve uygun kurucuları çağırarak bir nesneyi başlatmaktır. Fonksiyon mallocunun operatörden yeni bir başka farkı, malloc'un bildiri sırasında birincisinin yazmasına gerek kalmamasıdır. Ayrıca, işlev malloc benzer amaç için yeni operatörde “sil” kullanılırken belleği temizlemek için “serbest” kelimesini kullanır.
İkisinin de başarısızlık ve hafıza tükenmesi ile başa çıkmanın farklı yolları vardır. İşlev malloc başarısız olursa, bir NULL işaretçisi ile döner. New operatörü hiçbir zaman NULL işaretçisi döndürmez, bunun yerine bir istisna atarak hatayı belirtir. Bu yeni operatör için bir avantajdır, çünkü bilgisayar programcısı her yeni arama yaptığında geri dönen işaretçiyi kontrol etmek zorunda değildir veya bilgisayar programcısı böyle bir istisnayı kaçırmaz.
Malloc işlevi bir nesne oluşturmaz (nesnenin yapıcısı olarak adlandırılır), ancak new operatörü yapar. Yeninin bir diğer avantajı, işlev mallocu yapılamadığında operatörün aşırı yüklenebilmesidir. New operatörü, ayırmak için belirli sayıda nesne gerektirirken, malloc işlevi tahsis edilecek toplam bayt sayısını belirtmeyi gerektirir.
Bellek ayrıca realloc kullanılarak malloc işlevi kullanılarak yeniden boyutlandırılabilir veya yeniden tahsis edilebilir. Ancak, yeni operatör bu işlevi gerçekleştiremez ve operatörün ana dezavantajlarından biri olarak sayar. Malloc işlevinin yeni operatöre göre bir diğer avantajı malloc'un bellek miktarını hızlı bir şekilde artırabilmesidir. Bu hala malloc ve realloc kullanıyor. Aynı durumu C ++ dilinde yaparken, programcı new operatörü ile yeni bir bellek yığını oluşturmak zorundadır. Yeni belleğin değiştirilmiş bir boyutu olmalıdır ve orijinal arabellekteki veriler üzerine kopyalanacaktır. Orijinal arabellek kopyadan sonra silinmelidir. Bu bir programcı için yavaş bir süreç olabilir.
Yeni operatör, işlev void * döndürürken kesin veri türünü döndürerek işlev mallocu üzerinde kaldıraç kullanır. Fonksiyon mallocu ayrıca aşırı yüklenmenin mümkün olduğu operatör yeni ile karşılaştırıldığında aşırı yüklenemez. Operatörün yeni bir başka özelliği de, fonksiyon mallocuna kıyasla operatör ile hata yapma olasılığının düşük olmasıdır. Bu, özellikle çok sayıda kod yazıyorsa veya sıkı bir programda bir kod üzerinde çalışıyorsa, programcılar için bir artı olarak kabul edilir. Fonksiyon malloc ve free C ++ 'da kullanılabilir, ancak doğrudan kullanılamaz. Bunun yerine yenisinin kullanılması ve silinmesi önerilir.
Özet:
1. Malloc yeni bir operatör iken bir işlevdir.
2. Yeni, C ++ dilinde malloc kullanılırken C ++ dilinin belirli bir özelliğidir.
3. Yeni işleç “delete” ile devam ederken işlev malloc “free” ile gider.
4. İşlev malloc, C dili için kütüphane işlevidir; yeni operatör ise C ++ dilinden dil düzeyinde bir yapıdır.