Skip to content

An implementation of efficient, shared, concurrent and permanent storage of objects in unmanaged memory in static, non-changing locations that last the lifetime of a given process.

License

Notifications You must be signed in to change notification settings

goatcorp/goatcorp.Reloaded.Memory.Buffers

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Reloaded: Buffers Library



Allocate Memory... & Knuckles

Coverage NuGet Build Status

Introduction

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.

Features

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.

Non-Features

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.

Documentation

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.

Contributions

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%.

About

An implementation of efficient, shared, concurrent and permanent storage of objects in unmanaged memory in static, non-changing locations that last the lifetime of a given process.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%