Distributed Memory implementation

Marco Leise via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 19 23:58:20 PST 2016


Am Mon, 18 Jan 2016 05:59:15 +0000
schrieb tcak <1ltkrs+3wyh1ow7kzn1k at sharklasers.com>:

> I, due to a need, will start implementation of distributed memory 
> system.
> 
> Idea is that:
> 
> Let's say you have allocated 1 GiB space in memory. This memory 
> is blocked into 4 KiB.
> 
> After some reservation, and free operations, now only the blocks 
> 0, 12, and 13 are free to be allocated.
> 
> Problem is that those memory blocks are not consecutive.

Well ... there is a way that is a bit arcane. If you don't
need a lot of such remappings and you use page sized blocks
anyways, you could remap the scattered virtual memory to a new
consecutive range and be done.
Basically you reserve a new uncommitted (e.g. not backed by
physical memory) virtual memory range, remap your scattered
blocks into that range in the desired order and then release
the original blocks. I used this technique in a circular
buffer implementation, mirroring the start of the buffer to the
end, thus avoiding the wrapping problems that normally occur
when accessing data close to the end in a traditional
circular buffer.
Caveats: You'd need to allocate/free virtual memory directly
in multiples of the allocation granularity (which is the same
as the page size on POSIX) and you put some stress on the
virtual memory system. A process may have at most 2^16
memory mappings at a time on my Linux system.

-- 
Marco


More information about the Digitalmars-d mailing list