Reloaded.Memory.Buffers is a library designed with a rather simple purpose: Allocate and provide access to memory between a given minimum and maximum memory address.
The library provides an implementation of efficient, shared, concurrent and permanent storage of many small objects in memory in static, non-changing locations that last the lifetime of the process.
The goal is to allow multiple applications to access and write to shared contiguous memory regions (in user defined min - max memory regions) without wasting memory or time because due to memory micro allocations.
Below is a list of ideas as to what you can do/should expect from this library:
- General purpose memory storage shared between different threads, processes and modules in same process.
- Support for creating and using buffers (
MemoryBuffers
) in both current and external processes. - Reasonable performance in both the internal (current process) and external implementations.
- Easy to use method for finding existing
MemoryBuffers
in both current and external processes. - The ability to allocate
MemoryBuffers
in user specified memory address range.
If you don't like sharing memory with others or want to store data not lasting the lifetime of the process that you can later dispose (free), PrivateMemoryBuffers
are also now available.
Below is a list of ideas as to what you should NOT expect from this library:
- The straight up fastest, most performant solution. (Not possible without limiting functionality)
- Storage of disposable memory. (Everything written is stored for the lifetime of the program)
- Relocatable & resizable memory. (Usage of written bytes is unpredictable. Cannot fulfill.)
For more details please see what this library is not.
The following below are links aimed to help you get started with the library, they cover the basics of use:
For extra ideas of how to use the library, you may always take a look at Reloaded.Memory.Buffers.Tests
, the test suite for the library.
As with the standard for all of the Reloaded-Project
, repositories; contributions are very welcome and encouraged.
Feel free to implement new features, make bug fixes or suggestions so long as they are accompanied by an issue with a clear description of the pull request.
If you are implementing new features, please do provide the appropriate unit tests to cover the new features you have implemented; try to keep the coverage near 100%.