Mmap ve malloc arasındaki fark

Anonim

mmap vs malloc'da mevcut olan bir dizi işlevle tahsis edilmesine işaret ediyor

C'de dinamik bellek var ve bu, C standart kitaplığında mevcut olan bir dizi işlev vasıtasıyla C programlama dilindeki belleğin paylaştırılmasına işaret ediyor. Bunlardan biri malloc olup, bellek ayırma anlamına gelmektedir. UNIX sisteminde, kendi benzersiz I / O'su ile birlikte gelen bir bellek eşlemeli sistemine işaret eden mmap bulunur. Bu iki (mmap ve malloc), aynı işlevi yerine getirecek ancak daha ayrıntılı incelemeler bazı farklılıkları ortaya koyuyor. İşlevsellikten kaynaklanan bu farklılıklar aşağıda özetlenmiştir.

Farklar

Öncelikle, kullanılabilir hafızanın önemli derecede boğulması olduğunu gösteren herhangi bir kanıt olup olmadığını belirlemek önemlidir. Bu, programın bellek yönetimine karşı performansının ölçülmesi yoluyla yapılır.

Ana bellek ayırma arayüzü malloc'dur. Bu, C kütüphanesinin en büyüğüdür. İçinde bulunan yönetim kodunun bir kısmı mmap'tır. Malloc çalışırken, mevcut tüm sistem olanaklarını toplar. Ek sistem imkanları, sistemlerin tatmin edici bir bellek tahsisi yapılmasını sağlamak için kullandığı bellek yönetim stratejilerinden biri olan çekirdek aracılığıyla harekete geçirilebilir. Yine de bu süreç açık değildir ve insanların bellek ayırmayı dağıtabilen ve dolayısıyla düşük performans üreten basit programlar oluşturmalarını engellemek için tek nedeni ile karmaşık hale getirilmiştir.

'mmap' ise ücret alan bir sistem çağrısıdır ve çekirdeği bir uygulamanın adresinde kullanılmayan ve bitişik bir bölge bulmak için birkaç sayfanın eşleştirilmesini sağlayacak kadar büyük talep eder Bellek. Gerçekten de bir segfault ile sonuçlanamayan sanal bellek yönetim yapılarının oluşturulması da söz konusudur.

Malloc genellikle bellek yönetim sürecinin çoğunda işlev görür. Program ek bellek gerektiriyorsa, bu OS'den ödünç alınır. Mmap diğer yandan çekirdeği araziye dönüştüren bir bağlam anahtarı kullanır.

Malloc, mmap kullanımıyla değil, sistemde çalışan herhangi bir uygulamada bellek ayırmak için en uygun yöntemdir. Varsayılan olarak, izin verilmesi özel durumların haricinde yapılması gereken şey budur.

Mmap, uygulamalar tarafından verilen yanıtı hızlandırmak için kullanılabilir. Bununla birlikte, bazı baytları sayfalara ödün vermeyi bıraktığından uygulama düzgün çalışabilmesi için tavsiye edilmez. Başlangıçta veri içeriği küçük görünse de, çok sayıda uygulama çalıştırmak istediğinde ek bilgi çıkarmak, sistemi daha da yavaşlatabilir.

Kaynakları performans ve kullanım ölçümü yapıldıktan sonra, sistem üzerinde çalışan tüm uygulamaların veri kullanımını kapsamlı bir şekilde değerlendirmesi gerekir.Çalışan uygulamaların ömrü gösterilebilirse daha iyi hale gelebilir.

Bellek ayırma için mmap kullanımı dezavantaja sahiptir; bu da, verilerin parçalanması ve tahsisinin pahalı olması pahalıdır. Bunun nedeni, veriler çok sayıda alana bölünmüş olması ve ayrıca mmap'ın sistem çağrılarını reddetmesidir.

Mmap, malloc üzerinde avantajlıdır; çünkü mmap tarafından tüketilen bellek hemen OS'ye geri gönderilir. Bir veri kesimi aralığı olmadığı sürece, malloc tarafından kullanılan bellek geri getirilmez. Bu bellek özel olarak tekrar kullanılmaya devam eder.

Özet

'malloc', ana bellek ayırma noktası

anlamına gelir. Bir mmap sistemi çağırır ve bir çekirdeğe, birkaç bellek sayfasının eşleştirilmesini barındıracak uygulama adreslerinde kullanılmayan bölgeler bulmak ister.

Mmap önerilmez; bellek kullanılabilir belleği bölerken belleği tahsis eder ve sistem çağrıları yapamaz

malloc üzerinde mmap'ın bir yararı, malloc bellek yerine, kullanılabilir bellektir.