SaneCppMemory.h is library tracking and limiting runtime / dynamic allocations through the use of custom allocators.
All libraries are designed to let you use your favorite externally provided string / vector classes BUT if you've been sold on using also the Containers library then here you will find scoped allocator / arena infrastructure used by them.
Note: See
Tests/InteropSTL/*.cppfor an example of externally provided Container classes.
The "owned" String class is here and not in Strings library because it needs allocator support.
Note: If a library doesn't directly or indirectly depend on the Memory library, you can assume that it will not do any runtime / dynamic allocation.
Dependencies
- Dependencies: (none)
- All dependencies: (none)
Features
Classes
| Class | Description |
|---|---|
| SC::Buffer | SC::Buffer |
| SC::Memory | SC::Memory |
| SC::VirtualMemory | SC::VirtualMemory |
| SC::Globals | SC::Globals |
| SC::String | SC::String |
| SC::SmallString | SC::SmallString |
Status
Usable The library is solid. The Buffer implementation has been evolved and fine tuned to be minimal but effective.
Description
Memory library helps tracking and limit runtime / dynamic allocations through the use of custom allocators. A classic dynamically expandable binary buffer SC::Buffer is provided and it's largely shared to form the more object model oriented SC::Vector class from Containers Library.
All allocations throughout all downstream dependant libraries are centrally tracked by the SC::Globals class, that also allows re-defining custom thread-local allocators.
Such allocators can be just fixed buffers, regular heap memory or reserved SC::VirtualMemory using only limited amounts of Physical memory.
Buffer
String
SmallString
Memory
VirtualMemory
Globals
Blog
These blogs have been written before the split from Foundation into the Memory library:
These blog posts have been written after the split from foundation:
Roadmap
Complete Features:
- Things will be added as needed
💡 Unplanned Features:
- SharedPtr
- UniquePtr
Note: In Principles there is a rule that discourages allocations of large number of tiny objects and also creating systems with unclear or shared memory ownership. For this reason this library is missing Smart Pointers.
Statistics
LOC counts exclude comments. Library counts files physically under Libraries/Memory.
Single File counts
SaneCppMemory.h.
Standalone counts SaneCppMemoryStandalone.h and intentionally includes dependency
payloads.
| Metric | Header | Source | Sum |
|---|---|---|---|
| Library | 554 | 1053 | 1607 |
| Single File | 1566 | 1183 | 2749 |
| Standalone | 1566 | 1183 | 2749 |