Giriş
Şu satırı dahil ederiz.
Tanımlama
Şöyle yaparız.
Yeni bir dosya açmak için şöyle yaparız.
Mevcut dosyayı açmak için şöyle yaparız.
Belleğin büyüklüğünü artırır. Şöyle yaparız.
Şu satırı dahil ederiz.
#include <boost/interprocess/managed_mapped_file.hpp>
managed_mapped_file sınıfı ile kardeştir.Tanımlama
Şöyle yaparız.
using MMapManager = boost::interprocess::basic_managed_mapped_file<
char,
boost::interprocess::rbtree_best_fit<boost::interprocess::null_mutex_family,
boost::interprocess::offset_ptr<void>,
16u>,
boost::interprocess::iset_index>;
Bu tip için allocator ve veri yapısı da tanımlanır. Şöyle yaparız.using MMapAllocatorType = boost::interprocess::allocator<
std::size_t,
MMapManager::segment_manager>;
using MMapContainerType = boost::interprocess::vector<
std::size_t,
MMapAllocatorType>;
ConstructorYeni bir dosya açmak için şöyle yaparız.
auto file = std::make_unique<MMapManager>(
boost::interprocess::create_only,
"...", 100000000u
);
2. parametre olak dosya ismi için eğer geçici bir dosya ismi üretmek istersek şöyle yaparız.boost::filesystem::path getTemporaryFilePath()
{
auto ss = std::stringstream{};
ss << "MMap_test_" << boost::uuids::random_generator{}();
return boost::filesystem::temp_directory_path() / ss.str();
}
Üçüncü parametre olan dosya büyüklüğü için hesap yapmak istersek şöyle yaparız. Burada vector'ümüz içinde std::size_t sakladığı için sizeof (std::size_t) yapılıyor.// I've measured this at 256 bytes for my example configuration, but it's not
// documented anywhere, so let's overcompensate
constexpr auto ManagedFileOverhead = 1024u;
// Create memory mapped file, initially for 100 items
auto capacity = 100u;
const auto size = (capacity * sizeof(std::size_t)) + ManagedFileOverhead;
Mevcut dosyayı açmak için şöyle yaparız.
auto file = std::make_unique<MMapManager>(
boost::interprocess::open_only,
"...", 100000000u
);
construct metodu
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.Şöyle yaparız.
auto data = file->construct<MMapContainerType>("data_")
(file->get_segment_manager());
Bu çağrında sonra elimizde bir vector vardır. Bu vector üzerindeki klasik işlemleri yapabiliriz. Şöyle yaparız.// Fill with stuff
data->reserve(capacity);
for (auto i = 0u; i < capacity; ++i) {
data->push_back(i);
}
destroy metoduŞöyle yaparız.
file->destroy<MMapContainerType>("data_");
find metoduauto data = file->find<MMapContainerType>("data_").first;
grow metoduBelleğin büyüklüğünü artırır. Şöyle yaparız.
MMapManager::grow(
"...", oldFileSize + extraBytes);
Hiç yorum yok:
Yorum Gönder