Giriş
Şu satırı dahil ederiz.
Şöyle yaparız.
Elimizde şöyle bir kod olsun.
Şu satırı dahil ederiz.
#include <boost/interprocess/allocators/allocator.hpp>
Şu satırı dahil ederiz.
namespace bip = boost::interprocess;
Bu sınıf std::vector gibi nesnelere allocator olarak geçilebilir.
Tanımlama - char + managed_shared_memory
Şöyle yaparız.Tanımlama - char + managed_shared_memory
typedef bip::allocator<char, bip::managed_shared_memory::segment_manager>
char_alloc;
Tanımlama - void + managed_shared_memoryŞöyle yaparız.
using UniversalAllocator = bip::allocator
< void
, bip::managed_shared_memory::segment_manager >;
Tanımlama - T + managed_shared_memory
Şöyle yaparız.
// allocator for allocating memory from the shared memory
typedef bip::allocator<T, boost_ipc::managed_shared_memory::segment_manager>
ShmemAlloc;
Tanımlama - Foo + managed_mapped_file
Şöyle yaparız.
Şöyle yaparız.
struct Foo {
...
};
// declare the memory mapped file
boost::interprocess::managed_mapped_file mmf;
// declare the allocator
typedef bip::allocator< Foo, bip::managed_mapped_file::segment_manager > mmf_allocator;
Constructor - segment_manager
Örnek
Şöyle yaparız.
Örnek
Şöyle yaparız.
// create segment and corresponding allocator
bip::managed_shared_memory segment(bip::open_or_create, "MySharedMemory", 65536);
shm::char_alloc char_alloc(segment.get_segment_manager());
Elimizde şöyle bir kod olsun.
namespace Shared {
namespace bip = boost::interprocess;
using Segment = bip::managed_shared_memory;
using Manager = Segment::segment_manager;
template <typename T>
using Alloc = bip::allocator<T, Manager>;
void remove(char const* name) { bip::shared_memory_object::remove(name); }
using bip::create_only;
}
Bir allocator yaratmak için şöyle yaparız.using namespace Shared;
Shared::remove("MySharedMem");
auto memory = Segment(create_only, "MySharedMem", 65536);
using A = Alloc<char>;
A alloc(memory.get_segment_manager());
Daha sonra allocator tipi std::vector'ün kullanacağı allocator tipi olarak tanıtılır.template <typename Alloc>
struct MyType {
using allocator_type = typename Alloc::template rebind<char>::other;
explicit MyType(size_t aSize, Alloc alloc = {}) : mData(aSize, alloc) {}
private:
std::vector<char, Alloc> mData;
};
Şöyle yaparız.auto* pMyType = memory.find_or_construct<MyType<A>>("data")(1024,
memory.get_segment_manager());
Hiç yorum yok:
Yorum Gönder