Bitcoin ABC 0.30.3
P2P Digital Currency
|
An arena manages a contiguous region of memory by dividing it into chunks. More...
#include <lockedpool.h>
Classes | |
struct | Stats |
Memory statistics. More... | |
Public Member Functions | |
Arena (void *base, size_t size, size_t alignment) | |
virtual | ~Arena () |
Arena (const Arena &other)=delete | |
Arena & | operator= (const Arena &)=delete |
void * | alloc (size_t size) |
Allocate size bytes from this arena. More... | |
void | free (void *ptr) |
Free a previously allocated chunk of memory. More... | |
Stats | stats () const |
Get arena usage statistics. More... | |
bool | addressInArena (void *ptr) const |
Return whether a pointer points inside this arena. More... | |
Private Types | |
typedef std::multimap< size_t, char * > | SizeToChunkSortedMap |
typedef std::unordered_map< char *, SizeToChunkSortedMap::const_iterator > | ChunkToSizeMap |
Private Attributes | |
SizeToChunkSortedMap | size_to_free_chunk |
Map to enable O(log(n)) best-fit allocation, as it's sorted by size. More... | |
ChunkToSizeMap | chunks_free |
Map from begin of free chunk to its node in size_to_free_chunk. More... | |
ChunkToSizeMap | chunks_free_end |
Map from end of free chunk to its node in size_to_free_chunk. More... | |
std::unordered_map< char *, size_t > | chunks_used |
Map from begin of used chunk to its size. More... | |
char * | base |
Base address of arena. More... | |
char * | end |
End address of arena. More... | |
size_t | alignment |
Minimum chunk alignment. More... | |
An arena manages a contiguous region of memory by dividing it into chunks.
Definition at line 50 of file lockedpool.h.
|
private |
Definition at line 101 of file lockedpool.h.
|
private |
Definition at line 96 of file lockedpool.h.
Arena::Arena | ( | void * | base, |
size_t | size, | ||
size_t | alignment | ||
) |
Definition at line 46 of file lockedpool.cpp.
|
virtual |
Definition at line 55 of file lockedpool.cpp.
|
delete |
|
inline |
Return whether a pointer points inside this arena.
This returns base <= ptr < (base+size) so only use it for (inclusive) chunk starting addresses.
Definition at line 93 of file lockedpool.h.
void * Arena::alloc | ( | size_t | size | ) |
Allocate size bytes from this arena.
Returns pointer on success, or 0 if memory is full or the application tried to allocate 0 bytes.
Definition at line 57 of file lockedpool.cpp.
void Arena::free | ( | void * | ptr | ) |
Free a previously allocated chunk of memory.
Freeing the zero pointer has no effect. Raises std::runtime_error in case of error.
Definition at line 98 of file lockedpool.cpp.
Arena::Stats Arena::stats | ( | ) | const |
Get arena usage statistics.
Definition at line 135 of file lockedpool.cpp.
|
private |
Minimum chunk alignment.
Definition at line 115 of file lockedpool.h.
|
private |
Base address of arena.
Definition at line 111 of file lockedpool.h.
|
private |
Map from begin of free chunk to its node in size_to_free_chunk.
Definition at line 103 of file lockedpool.h.
|
private |
Map from end of free chunk to its node in size_to_free_chunk.
Definition at line 105 of file lockedpool.h.
|
private |
Map from begin of used chunk to its size.
Definition at line 108 of file lockedpool.h.
|
private |
End address of arena.
Definition at line 113 of file lockedpool.h.
|
private |
Map to enable O(log(n)) best-fit allocation, as it's sorted by size.
Definition at line 98 of file lockedpool.h.