c - How do I implement dynamic shared memory resizing? -


currently use shm_open file descriptor , use ftruncate , mmap whenever want add new buffer shared memory. each buffer used individually own purposes.

now need arbitrarily resize buffers. , munmap buffers , reuse free space again later.

the solution can come first problem is: ftuncate(file_size + old_buffer_size + extra_size), mmap, copy data accross new buffer , munmap original data. looks expensive me , there better way. entails removing original buffer every time.

for second problem don't have bad solution, can't move memory around everytime buffer removed. , if keep track of free memory , use whenever possible slow down allocation process leave me bits , pieces in between unused.

i hope not confusing. thanks

as best understand need grow (or shrink) existing memory mapping. under linux shared memory implemented file, located in /dev/shm memory filesystem. operations in file same on regular files (and file descriptors).

if want grow existing mapping first expand file size ftruncate (as wrote) use mremap expand mapping requested size.

if store pointers points region maybe have update these, first try call 0 flag. in case system tries grow existing mapping requested size (if there no collision other preserved memory region) , pointers remains valid.

if previous option not available use mremap_maymove flag. in case system remaps locations, it's done (no copy applied system.) update pointers.

shrinking same reverse order.


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Website Login Issue developed in magento -

Can the constants be defined inside a model file of a framework in PHP? -