mmap vs malloc
C'de dinamik bellek vardır ve bu, C standart kütüphanesinde bulunan bir dizi fonksiyon aracılığıyla C programlama dilinde bellek tahsisine işaret eder. Bunlardan biri, bellek tahsisine atıfta bulunan malloc'dur. UNIX sisteminde, kendi benzersiz G / Ç ile birlikte gelen bellek eşlemeli bir sistemi ifade eden mmap vardır. Bu iki (mmap ve malloc) değeri aynı işlevi yerine getirecektir, ancak daha fazla inceleme bazı farklılıkları ortaya koymaktadır. İşlevsellikten kaynaklanan bu farklılıklar aşağıda ana hatlarıyla verilmiştir..
farklılıklar
Öncelikle, mevcut hafızanın önemli ölçüde boğulduğ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üphanesindeki en büyük kütüphanedir. İçerdiği yönetim kodunun bir kısmı mmap'dir. Malloc çalışırken mevcut tüm sistem olanaklarını toplar. Ek sistem tesisleri, sistemlerin tatmin edici bir bellek tahsisi olmasını sağlamak için kullandığı bellek yönetimi stratejilerinden biri olan çekirdek aracılığıyla mobilize edilebilir. Bununla birlikte, süreç basit değildir ve insanların bellek tahsisini düzensiz hale getirebilecek ve dolayısıyla zayıf performans yaratabilecek basit programlar oluşturmasını engellemek için karmaşık hale getirilmiştir..
Öte yandan 'mmap', ücret alan ve çekirdeğin, uygulamanın adresinde, birkaç sayfalık belleğin eşlenmesine izin verecek kadar büyük kullanılmayan ve bitişik bir bölge bulmasını isteyen bir sistem çağrısıdır. Gerçekte bir segfault ile sonuçlanamayan sanal bellek yönetimi yapılarının oluşturulması da vardır..
Malloc genellikle bellek yönetimi sürecinin çoğunda çalışır. Programın ek bellek gerektirmesi durumunda, bu işletim sisteminden ödünç alınır. Mmap ise çekirdek toprağa dönüşen bir bağlam anahtarını kullanıyor.
Malloc, mmap kullanımının aksine sistemde çalışan herhangi bir uygulamada bellek ayırmak için en uygun yöntemdir. İzin verilebileceği özel durumlar dışında, varsayılan olarak gerçekleşmesi gereken budur.
Mmap, uygulamalar tarafından verilen yanıtı hızlandırmak için kullanılabilir. Bununla birlikte, uygulamanın düzgün çalışabilmesi için sayfalara bazı baytlardan ödün vermesi nedeniyle bu önerilmez. Veri içeriği başlangıçta küçük görünse de, çok sayıda uygulama çalıştırmak istediğinde onu tahmin etmek aslında sistemi daha da yavaşlatabilir.
Performans ve kaynak kullanımının ölçülmesinden sonra, sistemde çalışan tüm uygulamalar tarafından veri kullanımının kapsamlı bir değerlendirmesi yapılmalıdır. Çalışan uygulamaların kullanım ömürleri gösterilebiliyorsa daha iyi olabilir.
Bellek tahsisi için mmap kullanımı, parçalara veri tahsisi ve yeniden yerleştirilmesinin pahalı olması dezavantajı ile birlikte gelir. Bunun nedeni, verilerin çok sayıda alana bölünmesi ve ayrıca mmap'in sistem çağrıları yapmasını reddetmesidir.
Mmap malloc üzerinde avantajlıdır, çünkü mmap tarafından kullanılan bellek derhal işletim sistemine geri döner. Bir veri segmenti kesilmediği sürece malloc tarafından kullanılan bellek asla döndürülmez. Bu bellek özel olarak yeniden kullanılmak üzere saklanır.
özet
'malloc' ana bellek ayırma noktasını temsil eder
Bir mmap sistemi, uygulama adreslerinde, birkaç bellek sayfasının eşlenmesini barındırabilecek kullanılmayan bölgeleri bulması için bir çekirdek çağırır ve ister
Mmap, kullanılabilir belleği ayırdığı ve sistem çağrıları yapamadığı için bellek tahsisi için önerilmez
Malma üzerinde mmap'ın bir yararı, yeniden kullanılan malloc belleğin aksine belleğin kullanılabilirliğidir..