Tavsiye, 2024

Editörün Seçimi

New ve malloc Arasındaki Fark ()

New ve malloc () her ikisi de belleği dinamik olarak ayırmak için kullanılır. Yine de, new ve malloc () birçok bağlamda farklıdır. New ve malloc () arasındaki temel fark, yeninin yapı olarak kullanılan operatör olmasıdır. Öte yandan, malloc () çalışma zamanında bellek ayırmak için kullanılan standart bir kütüphane işlevidir. Aralarındaki diğer farklılıklar karşılaştırma tablosunda aşağıda tartışılmıştır:

Karşılaştırma Tablosu

Karşılaştırma için temelyenimalloc ()
DilYeni işleç, C ++, Java ve C # 'nın belirli bir özelliğidir.Malloc () işlevi C'nin bir özelliğidir.
Doğa"yeni" bir operatördür.malloc () bir fonksiyondur.
boyutu( )yeni belirli tip için işleç asit büyüklüğü yeterli bellek ayırmak gerekmezmalloc, hangi bellek boyutunun ayrılması gerektiğini bilmek için operatörün boyutunu gerektirir.
inşaatçıYeni Operatör bir nesnenin yapıcısını çağırabilir.malloc (), bir kurucu için arama yapamaz.
BaşlatmaYeni işleç, kendisine bir bellek tahsis ederken bir nesneyi başlatabilir.Malloc'ta hafıza başlatma işlemi yapılamadı.
fazla yüklemeOperatör yeni aşırı yüklenebilir.Malloc () asla aşırı yüklenemez.
başarısızlıkBaşarısızlık durumunda, operatör yeni bir istisna atar.Hata durumunda, malloc () bir NULL döndürür.
DeallocationYeni bellek ayırma, "delete" ile ayrıldı.Malloc () tarafından yapılan hafıza tahsisi bir free () işlevi kullanılarak serbest bırakılır.
Yeniden tahsisYeni operatör hafızayı yeniden tahsis etmiyor.Malloc () tarafından ayrılan hafıza realloc () kullanılarak yeniden tahsis edilebilir.
infazYeni operatör çalıştırma süresini kısaltır.Malloc () yürütmek için daha fazla zaman gerektirir.

Yeni tanımı

Yeni operatör, hafızayı dinamik olarak tahsis eden bir hafıza ayırma operatörüdür. Yeni işleç, öbek içinde bellek ayırır ve referans değişkene atanmış olan belleğin başlangıç ​​adresini döndürür. Yeni operatör C'deki malloc'a () benzer. Ancak, C ++ derleyicisi malloc () ile uyumludur, ancak malloc () 'a göre belirli avantajlara sahip olduğu için yeni operatörü kullanmak en iyisidir. Yeni operatörün sözdizimi aşağıdaki gibidir:

 type değişken_ismi = yeni tip (parametre_listesi); 

Burada “type”, belleğin tahsis edilmesi gereken değişken veri tipini belirtir. "Değişken_adı" sözcüğü, işaretçiyi belleğe tutan başvuru değişkenine verilen addır. Buradaki parantez, yapıcının çağrılmasını belirtir. Parametre_listesi, yeni inşa edilen nesneyi başlatmak için yapıcıya iletilen değerlerin listesidir.

Yeni işleç, belirli bir türdeki bir nesne için gereken yeterli belleği ayırır. Bu nedenle, bir sizeof () operatörü gerektirmez ve belleği yeniden yerleştirmek için realloc () işlevini kullanan malloc () gibi belleği yeniden boyutlandırmayı da gerektirmez. Yeni operatör bir yapıdır; genellikle bir nesnenin yapıcısını çağırırken, genellikle nesneyi başlatmak için kullanılır.

Yeni operatörün hafızayı yığına tahsis ettiğini ve yığının boyutunun sınırlı olduğunu biliyoruz. Öyleyse, yığın bellek yetersizse ve yeni operatör belleği ayırmaya çalışırsa, yeni operatörün başarısız olmasına neden olur. Yeni operatör hafızayı tahsis edemezse, bir istisna atar ve kodunuz bu istisnayı idare edemiyorsa, program olağandışı şekilde sonlandırılır.

Operatör tarafından ayrılan hafıza, silme operatörü kullanılarak serbest bırakılabilir. Yeni operatör, bir fonksiyonu değil, bir operatörü olduğu için yürütme süresini kapatır.

Malloc'un tanımı ()

Malloc (), istenen bellek miktarını öbek üzerine tahsis etmek için kullanılan bir fonksiyondur. Yöntem, 'void' türündeki göstericiyi döndürür, belirtilen türdeki bir belleğe bir işaretçi elde etmek için cast yazın ve bu işaretleyiciyi belleğe bir referans değişkenine atanır. Malloc () işlevi, belleği dinamik olarak tahsis etmek için kullanıldığı için C ++ 'daki yeni operatöre benzer. Malloc () standart bir kütüphane işlevidir. Malloc () işlevinin sözdizimi aşağıdaki gibidir:

 type değişken_adı = (tip *) malloc (sizeof (tip)); 

Burada “tip”, belleğin tahsis edilmesi gereken değişken veri tipini gösterir. Değişken_adı, malloc () tarafından döndürülen işaretçinin atanacağı referans değişkeninin adıdır. (Tür *), belirli bir türdeki belleğe bir işaretçi elde etmek için tür dökümünü açıklar. Sizeof (), hangi bellek boyutunun gerekli olduğunu malloc () işlevini açıklar.

Malloc (), tip dökümünü gerektirir, çünkü malloc () tarafından döndürülen işaretçi, boşluk türündendir, bu nedenle, göstericiye bir tür atamak için, döküm türü gereklidir. Malloc () işlevi bir ham bellek tahsis ettiği için sizeof () işlevi gereklidir, bu nedenle malloc () işlevine hangi bellek boyutunu ayırması gerektiğini söylemek gerekir. Tahsis edilen hafıza yeterli değilse, realloc () kullanılarak yeniden boyutlandırılabilir veya yeniden tahsis edilebilir.

Malloc () işlevi, öbek üzerinde bellek ayırır. Öbek, bellekte yetersiz kaldığında, malloc () işlevi bir NULL işaretçisi döndürür. Bu nedenle, malloc () tarafından döndürülen işaretçiyi içeren referans değişkeni kullanılmadan önce kontrol edilmelidir, aksi halde sistem çökmesine neden olabilir.

Malloc () işlevi tarafından ayrılan bellek, free () kullanılarak serbest bırakılır. İşlev çağrısı bir ek yüke yol açtığından, malloc () yürütmek için daha fazla zaman gerektirir.

New ve malloc () arasındaki Temel Farklar

  1. Yeni işleç, C ++ 'da tanıtılan ve Java, C #, vs.'de kullanılan bir yapıdır. Öte yandan malloc (), yalnızca C dilinde bulunan ve C ++ tarafından desteklenen standart bir kütüphane işlevidir.
  2. Yeni işleç, belirtilen bir türdeki nesne için yeterli bellek ayırır, bu nedenle boyutlandırma işleci gerektirmez. Öte yandan, malloc () işlevi, işlevin hangi bellek boyutunu ayırması gerektiğini bilmesini sağlamak için sizeof () operatörünü gerektirir.
  3. Yeni operatör, bildirim sırasında nesnenin yapıcısını çağırabilir. Öte yandan, malloc () işlevi yapıcıyı çağıramaz.
  4. 'Yeni' işleci aşırı yüklenebilir, ancak malloc () olamaz.
  5. Yeni operatör hafızayı tahsis edemezse, kod tarafından kullanılması gereken bir istisna atar, aksi halde program sonlandırılır. Öte yandan, malloc () işlevi, bellek ayıramadığında bir NULL işaretçisi döndürür. İşaretçi bunu kontrol etmeden kullanılırsa, sistem çökmesine neden olur.
  6. Yeni bir operatör kullanılarak ayrılan hafıza, 'delete' ile ayrılabilir. Diğer yandan, malloc () işlevi kullanılarak ayrılan bellek, free () kullanılarak ayrılabilir.
  7. Hafıza yeni bir operatör kullanılarak tahsis edildikten sonra, yine de yeniden boyutlandırılamaz. Diğer yandan, malloc () işlevi kullanılarak ayrılan bellek, realloc () işlevi kullanılarak yeniden tahsis edilebilir (yeniden boyutlandırılabilir).
  8. Yeni yürütme süresi malloc () ile karşılaştırıldığında daha azdır, çünkü malloc bir işlevdir ve yeni bir yapıdır.

Sonuç:

Malloc () işlevi, belleği dinamik olarak ayırmanın eski yoludur. Günümüzde, yeni operatör çalışma zamanında belleği ayırmak için kullanılır, çünkü malloc () 'a göre bazı avantajları vardır.

Top