2010-03-28 10 views
12

Eşlenmiş bir ikili dosyayı belleğe oluşturmak istiyorum; ancak sistemde eşlenecek dosyayı nasıl oluşturacağımı bilmiyorum. Dokümantasyonu birkaç kez okudum ve biri haritalanmış, diğeri süreçler arası olmak üzere 2 adet eşlenmiş dosya uygulaması olduğunu anlıyorum. Boost iostream mapped dosyası ile inter-interced mapping dosyası arasında fark var mı?

siz paylaşılan belleğe eşlenmiş dosyasının nasıl oluşturulacağı üzerinde bir fikrin var mı? Çok iş parçacıklı bir programın bir ikili dosya biçiminde yazılmış büyük çift bir diziyi okumasına izin vermeye çalışıyorum. Ayrıca iostream ve interprocess'te eşlenen dosya arasındaki fark nedir?

cevap

2

Bildiğim kadarıyla söyleyebilirim, iostreams paylaşılan hafızada eşlenen dosyasını yerleştirin (bu ne istediğiniz) olacak; Ancak, süreçler arası süreç, dosyayı başka bir işlemin adres alanına yerleştirir. Eğer bir şekilde birbirleriyle iletişim olacaktır çoklu süreçleri (dişleri değil) yoksa

Muhtemelen iostreams kullanmalıdır.

+0

Açıklama için teşekkürler Joe, iostream'i deneyeceğim. – Yijinsei

+2

@Joe D: Bu, süreçler arası kütüphaneden aldığım izlenim değil. Özellikle, belgelere göre: "sistem, dosyayı ve işlemin adres alanını ilişkilendirmek için bir dosya eşlemesi oluşturur." Birden çok işlem için, aslında bir dosya sistemi yedeği ile bellek paylaştı. – rcollyer

+0

Evet, ancak arası işlem kitaplığı bir dosya sistemi yedeği oluşturmuyor, yalnızca dosyayı süreçler arası paylaşılan belleğe eşler. Ancak iostreams, bunu tek bir işlem için belleğe eşler. Muhtemelen (uygulamayı kontrol etmedim) daha verimli. –

0

İkisi arasında gördüğüm en önemli fark, nasıl kullanıldığının. boost-interprocess'da, bellek eşlemeli bir dosya kullanmak için, new yerleşimini kullanarak bu bellek alanında nesneler oluşturursunuz ve bu nesneler dosyanızdaki ikili formda otomatik olarak kalıcı olur. Diğer işlemler daha sonra aynı dosyayı eşleyebilir ve bu nesneleri kullanabilir veya programın kendisini kalıcı bir önbellek olarak kullanabilir ve daha sonra yeniden yükleyebilir. boost-iostreams'daki bellek eşlemeli dosyalar, dosya akışları gibi, boost::iostream olmanın ek faydaları gibi davranır ve ara işlem iletişimine akış anlamlarını sağlar. Tek bir süreç için

, boost::iostream bellek haritalı dosyalarını kullanarak çok yararı yoktur. Ancak, daha önce belleğe yüklenecek olan dosya ile çalışmanın gecikmesini azaltabilir. Ancak, yalnızca dosyanın parçalarını sürekli yeniden yazıyorsanız bu avantajı elde edersiniz. Dosyanın tek bir okuma/yazma işlemi için herhangi bir hızlanma olmayabilir.

İlgili konular