Boost logo

Boost Users :

Subject: Re: [Boost-users] [interprocess] Determine size of managed_shared_memory
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2010-08-05 14:54:46


On 05/08/2010 16:39, Kai Benndorf wrote:
> Hi all,
>
> I want to create a managed_shared_memory in exactly the size I needed.
> Therefore I do something like this:
>
> size = sizeof( common_managed_shared_memory );
> size += sizeof( MyClassInSharedMem );
>
> managed_shared_memory segment(create_only, "name", size );
>
> MyClassInSharedMem allocates itself some memory by segment->allocate().
> I added this also to the size, but get a boost::interprocess::bad_alloc
> exception on allocating this additional memory.
>
> Are there some magic bytes I forgot to add?

Yes, but you can't calculate it, because there are memory allocation
bookeeping and fragmentation issues that change in runtime depending on
your allocation/deallocation pattern. And shared memory is allocated by
pages by the OS (4K on linux 64k on windows), so any allocation will be
in practice allocated rounded to a page:

managed_shared_memory segment(create_only, "name", 20);

will waste the same memory as:

managed_shared_memory segment(create_only, "name", 4096);

Ion


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net