Logo tr.removalsclassifieds.com

Mmap ve Malloc Arasındaki Fark (Tablolu)

İçindekiler:

Anonim

C programlamada, bir dizi fonksiyon aracılığıyla C standart kitaplığındaki belleğin tahsisine işaret eden dinamik bir bellek vardır. Malloc bunlardan biridir ve bellek ayırmak için kullanılır. Sonra mmap var. Bu, benzersiz giriş ve çıkışı olan bellek eşlemeli bir sistem olarak kullanılır. Bu ikisi aynı işlevleri sağlar, ancak bu konuyu daha fazla kazmak bazı farklılıkları ortaya çıkarır.

Mmap, Malloc'a karşı

mmap ve malloc arasındaki fark, mmap'in yürütme süresinin malloc'unkinden çok daha kısa olmasıdır. Malloc ana bellek ayırma arabirimidir, mmap ise bir sistemdir. Bu, çekirdeğin birçok sayfanın eşlenmesine izin vermek için yeterince büyük adresleri aramasından sorumludur.

Hesaplamada Mmap, tüm verileri veya dosyaları ve cihazları belleğine kaydeden bir POSIX çoklu görev sistem çağrısıdır. Bu, bellek eşlemeli dosyanın altına düşen ve içerik doğrudan sürücüden okunamadığı için verilerin fiziksel belleğine kopyalanmasını uygulayan yöntem olarak da bilinir.

Malloc, belirtilen boyutla ilgili olarak büyük bir veri bloğunu dinamik olarak tahsis etmek için kullanılan ve başarılı olduğunda, ayrılan belleğin ilk baytına işaret eden bir işaretçi döndürür, aksi takdirde NULL döndürür.. Gerçek bellek ayırma mekanizmasında, Malloc tarafından kullanılan birçok farklı başarı mevcuttur.

Mmap ve Malloc Karşılaştırma Tablosu

Karşılaştırma Parametreleri

Mmap

Malloc

Tanım Mmap, çekirdekten sayfaların eşlenmesi için büyük bir adres bulmasını isteyen bir sistem çağrısına atıfta bulunur. Malloc, sistemde bulunan tüm olanakları toplayan ana bellek ayırma arabirimidir.
İşlev Mmap, bağlam anahtarını kullanır ve onu bir çekirdek alanına dönüştürür. Malloc, apile'deki bellek bloğunu tahsis eder.
olarak da adlandırılır Mmap, sistem çağrısı olarak da bilinir. Malloc, ana bellek ayırma arabirimi olarak da bilinir.
Sonuçlar Mmap, diğer sistem performansını etkilemez. Malloc düzensizleşir ve sistemin performansının düşük olmasına neden olur.
için en uygun Mmap, uygulamalar tarafından verilen yanıt sürecini hızlandırmak için en uygun olanıdır. Malloc, sistemdeki herhangi bir uygulamada bellek ayırmak için en uygun olanıdır.

Mmap nedir?

Mmap, verileri, dosyayı veya aygıtı belleğe eşleyen POSIX uyumlu bir Unix sistem çağrısına atıfta bulunur. Bellek eşlemenin bir girdi, çıktı yöntemidir. Çağırma işleminde sanal adres alanında yeni bir eşleme oluşturulur. Adresinde yeni eşlemenin ilk adresi bulunur ve eşlemenin uzunluğu, uzunluk argümanı ile belirtilir (0'dan büyük olmalıdır).

Eğer adres NULL olarak bulunursa, adres çekirdek tarafından seçilir, bu da yeni eşleme yapmanın en kolay yöntemi olarak kabul edilen eşlemeyi yapar. Adres NULL olarak bulunamadıysa, çekirdek bunu, eşlemeyi Linux'ta bir yere yerleştirmenin bir göstergesi olarak kabul eder.

Çekirdek en yakın sayfa sınırını bulur ve o alanda bir haritalama yapmaya çalışır. Çekirdek, bölgede zaten mevcut olan bir eşleme bulursa, çekirdeğin varsaydığı göstergeye bağlı olabilecek yeni bir adres seçer. Bu çağrı sonucunda yeni haritalamanın adresi geri gönderilir. Çağrı döndürüldükten hemen sonra, dosya tanıtıcı fd, geçersiz kılmadan eşlemeyi hemen kapatır.

Malloc nedir?

malloc (), boyut baytlarını ayıran ve ayrılan belleğe bir işaretçi gönderen bir bellek ayırma işlevidir. Bellek başlangıç ​​konumuna ayarlı değil. Boyut bayt adı 0 ise, malloc () tarafından NULL veya benzersiz bir değer işaretçisi gönderilir, bu daha sonra başarıyla free () 'ye geçirilebilir.

ptr ile gösterilen bellek alanı, malloc () tarafından geri gönderilmesi gereken free () işlevi tarafından serbest bırakılır. Aksi takdirde, daha önce free (ptr) çağrıldıysa, tanımsız davranışın oluştuğu söylenir. ptr Bulundu NULL ise hiçbir işlem yapılmaz veya gerçekleştirilmez. ptr NULL olarak bulunursa, her boyut değeri için bir çağrının değeri malloc'a (boyut) eşittir; 0'a eşitse ve ptr NULL olarak bulunmazsa, çağrı değeri free (ptr) değerine eşittir.

Yalnızca ptr NULL olduğunda, önceki bir malloc() çağrısıyla geri gönderilmesi gerekirdi. Ve işaret edilen alan değiştirildi, serbest (ptr) yapıldı. Varsayılan olarak, Linux tarafından iyimser bir bellek ayırma stratejisi izlenir; bu, malloc () NULL olmayan bir geri gönderirse, belleğin kaybolma ihtimalinin olduğu anlamına gelir. Ve sistemde bellek sıkıntısı olduğu ortaya çıkarsa, OOM katili tarafından birkaç işlem yok edilecektir.

Mmap ve Malloc Arasındaki Temel Farklar

Çözüm

Sonuç olarak, mmap, çekirdeğe çeşitli bellek sayfalarının eşlenmesine sığacak bir uygulama adresindeki boş bir bölgeyi bulmasını isteyen bir sistem çağrısıdır, malloc ise belirli bir boyutta bellek bloğu tahsis eden bir bellek ayırma noktasıdır. Bellek, çalışma zamanında ayarlanır, yani program yürütülene kadar başka bir alan ayrılamaz.

Bazı noktalarda mmap'in malloc'a göre bir avantajı vardır, mmap belleği böldüğü ve ardından bir sistem çağrısı yapamadığı için bellek tahsisi için bu ikisi arasında seçim yapılması önerilmez.

Referanslar

Mmap ve Malloc Arasındaki Fark (Tablolu)