Malloc ve Yeni arasındaki fark

Anonim

Malloc vs Yeni

Bir Bir bilgisayar programcısı seçmekle ilgili en yaygın röportaj soruları başvuran / bilgisayar programcısı için malloc ile yeni arasındaki farkları açıklamak içindir. Hem malloc hem de yeni bilgisayar dili alanında bulunur ve genellikle bilgisayar programcıları tarafından dinamik bellek ayırmaları için kullanılırlar.

İkisi arasındaki temel farklar, malloc'un C dili içerisinde var olmasıdır. Yeni ise, C ++ dilinin belirli bir özelliğidir. Malloc da bir işlevdir (programcılar için yürütülmesi biraz zaman alır), new ise (çalıştırma süresini kısaltan) bir operatör programıdır. Bu, operatöre yeni bir getiri getiriyor, çünkü gerçek zamanlı programlama yapan programcılar, kullanmak için en hızlı yöntemi seçme ihtiyacı duyuyorlar.

Operator new, malloc işlevinin tersine türden kısıtlıdır.

İşlev malloc, C dili için kütüphane işlevidir. Tek yaptığı bellek tahsis etmek ve ona bir işaretçi döndürmek. Öte yandan operator new, dil seviyesinde bir yapıdır ve işi, bir nesneyi belleği tahsis ederek ve uygun yapıcıları çağırarak örneklemektir. İşlev malloc'unun yeni operatörden bir diğer farkı, malloc'un bildirim sırasında typecasting yapmasını gerektirmesi, ancak malloc'un bildirimde typecasting'i gerektirmemesi. Ayrıca, işlev "malloc" benzer amaçla operatöre yeni "sil" kullanıldığında belleği silmek için "serbest" kelimesini kullanır.

İkisi de başarısızlık ve hafıza tükenişiyle başa çıkmada farklı yollara sahipler. Eğer işlev malloc başarısız olursa, bir NULL işaretçisi ile döner. Yeni operatör, asla bir NULL işaretçisi döndürmez, bunun yerine bir istisna atarak başarısızlığı belirtir. Bu, operatörün yeni bir avantajıdır, çünkü bilgisayar programcısı döndürülen işaretçiyi yeni çağırdığında kontrol etmek zorunda değildir; bilgisayar programcısı böyle bir istisnayı özleyecektir.

İşlev malloc bir nesne oluşturmaz (nesne kurucusu olarak adlandırılır) ancak yeni işleci yapar. Yeni bir diğer avantajı, malloc fonksiyonu çalışmazken operatörün aşırı yüklenebilmesidir. Yeni operatör, işlev malloc'u ayırmak için toplam bayt sayısını belirtirken, tahsis etmek için belirli sayıda nesneyi gerektirir.

Bellek, realloc kullanarak malloc işlevini kullanarak yeniden boyutlandırılabilir veya yeniden tahsis edilebilir. Bununla birlikte, yeni operatör bu işlevi yerine getiremez ve operatörün ana dezavantajlarından biri olarak sayar. İşlev mallocunun yeni operatör üzerindeki yeni bir diğer avantajı, malloc'un bellek miktarını hızlı bir şekilde genişletebilmesidir. Bu yine de malloc ve realloc kullanıyor. Aynı durumu C ++ dilinde yaparken, programcı yeni operatörle yeni bir bellek yığını yaratmak zorundadır. Yeni belleğin değiştirilmiş bir boyutu olmalıdır ve orijinal tampondaki veriler üzerine kopyalanır.Orijinal tampon kopyadan sonra silinmelidir. Bu bir programcı için yavaş bir süreç olabilir.

Operatörün yeni, işlev boşluk * döndürürken tam veri türünü döndürerek işlev malloc üzerinden kaldıraç vardır. Fonksiyon malloc'u aşırı yüklenmenin mümkün olduğu yeni operatöre göre aşırı yüklenemez. Operatöre yeni bir diğer özelliği operatör malloc'la karşılaştırıldığında operatörle hata yapma şansı az olmasıdır. Özellikle çok sayıda kod yazan veya sıkı bir program üzerinde bir kod üzerinde çalışıyorlarsa, programcılar için bu bir artı olarak kabul edilir. C ++'da işlev malloc ve free kullanılabilir, ancak doğrudan kullanılamaz. Yeni kullanmak ve silmek yerine önerilir.

Özet:

1. Malloc, yeni bir operatör iken bir işlevdir.

2. Yeni, malloc C dili kullanılırken C ++ dilinin belirli bir özelliğidir.

3. Yeni operatör, "malloc" işlevi "ücretsiz" ile çalışırken "delete" ile devam eder. “4

. İşlev malloc, C dili için kütüphane işlevi iken yeni operatör, C ++ dilinden bir dil seviyesinde bir yapıdır.