OpenDDS
Snapshot(2023/04/07-19:43)
|
#include <MemoryPool.h>
Public Member Functions | |
MemoryPool (unsigned int pool_size, size_t granularity=8) | |
~MemoryPool () | |
bool | includes (void *ptr) const |
void * | pool_alloc (size_t size) |
bool | pool_free (void *ptr) |
size_t | lwm_free_bytes () const |
size_t | size () const |
Static Public Member Functions | |
static size_t | align (size_t size, size_t granularity) |
Private Types | |
enum | { min_free_size = sizeof(FreeHeader) } |
Private Member Functions | |
void | remove_free_alloc (FreeHeader *block_to_alloc) |
void | insert_free_alloc (FreeHeader *block_freed) |
void | join_free_allocs (FreeHeader *block_freed) |
unsigned char * | allocate (FreeHeader *free_block, size_t alloc_size) |
bool | joinable_next (FreeHeader *freed) |
bool | joinable_prev (FreeHeader *freed) |
Private Attributes | |
const size_t | granularity_ |
Configured granularity. More... | |
const size_t | min_alloc_size_ |
Aligned minimum allocation size. More... | |
const size_t | pool_size_ |
Configured pool size. More... | |
size_t | lwm_free_bytes_ |
Low water mark of available bytes. More... | |
unsigned char * | pool_ptr_ |
Pointer to pool. More... | |
FreeHeader * | largest_free_ |
Pointer to largest free index. More... | |
FreeIndex | free_index_ |
Index of free nodex. More... | |
Friends | |
class | Test::MemoryPoolTest |
Definition at line 162 of file MemoryPool.h.
|
private |
|
explicit |
Definition at line 300 of file MemoryPool.cpp.
References free_index_, OpenDDS::DCPS::FreeIndex::init(), OpenDDS::DCPS::FreeHeader::init_free_block(), largest_free_, lwm_free_bytes_, pool_ptr_, pool_size_, and OpenDDS::DCPS::AllocHeader::size().
OpenDDS::DCPS::MemoryPool::~MemoryPool | ( | ) |
Definition at line 320 of file MemoryPool.cpp.
References pool_ptr_.
|
inlinestatic |
Calculate aligned size of allocation
Definition at line 184 of file MemoryPool.h.
Referenced by pool_alloc().
|
private |
Definition at line 496 of file MemoryPool.cpp.
References includes(), insert_free_alloc(), min_free_size, OpenDDS::DCPS::AllocHeader::next_adjacent(), OpenDDS::DCPS::AllocHeader::ptr(), remove_free_alloc(), OpenDDS::DCPS::AllocHeader::set_allocated(), OpenDDS::DCPS::AllocHeader::set_prev_size(), OpenDDS::DCPS::AllocHeader::set_size(), and OpenDDS::DCPS::AllocHeader::size().
Referenced by pool_alloc().
|
inline |
Does the pool include a given pointer
Definition at line 169 of file MemoryPool.h.
Referenced by allocate(), join_free_allocs(), joinable_next(), joinable_prev(), and pool_free().
|
private |
Definition at line 465 of file MemoryPool.cpp.
References OpenDDS::DCPS::FreeIndex::add(), OpenDDS::DCPS::FreeIndex::find(), free_index_, largest_free_, pool_ptr_, OpenDDS::DCPS::FreeHeader::set_larger_free(), OpenDDS::DCPS::FreeHeader::set_smaller_free(), OpenDDS::DCPS::AllocHeader::size(), and OpenDDS::DCPS::FreeHeader::smaller_free().
Referenced by allocate(), and join_free_allocs().
|
private |
Definition at line 408 of file MemoryPool.cpp.
References includes(), insert_free_alloc(), OpenDDS::DCPS::AllocHeader::join_next(), joinable_next(), joinable_prev(), OpenDDS::DCPS::AllocHeader::next_adjacent(), OpenDDS::DCPS::AllocHeader::prev_adjacent(), remove_free_alloc(), OpenDDS::DCPS::AllocHeader::set_prev_size(), and OpenDDS::DCPS::AllocHeader::size().
Referenced by pool_free().
|
private |
Definition at line 544 of file MemoryPool.cpp.
References includes(), OpenDDS::DCPS::AllocHeader::is_free(), and OpenDDS::DCPS::AllocHeader::next_adjacent().
Referenced by join_free_allocs().
|
private |
Definition at line 553 of file MemoryPool.cpp.
References free_index_, includes(), OpenDDS::DCPS::AllocHeader::is_free(), OpenDDS::DCPS::FreeHeader::larger_free(), largest_free_, OpenDDS::DCPS::AllocHeader::next_adjacent(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, pool_ptr_, pool_size_, OpenDDS::DCPS::AllocHeader::prev_adjacent(), OpenDDS::DCPS::AllocHeader::prev_size(), ACE_OS::printf(), OpenDDS::DCPS::AllocHeader::ptr(), OpenDDS::DCPS::AllocHeader::size(), OpenDDS::DCPS::FreeHeader::smaller_free(), snprintf(), and TEST_CHECK.
Referenced by join_free_allocs().
size_t OpenDDS::DCPS::MemoryPool::lwm_free_bytes | ( | ) | const |
Low water mark of maximum available bytes for an allocation
Definition at line 328 of file MemoryPool.cpp.
References lwm_free_bytes_.
void * OpenDDS::DCPS::MemoryPool::pool_alloc | ( | size_t | size | ) |
Allocate size bytes from the pool
Definition at line 334 of file MemoryPool.cpp.
References align(), allocate(), OpenDDS::DCPS::FreeIndex::find(), free_index_, granularity_, largest_free_, lwm_free_bytes_, min_alloc_size_, pool_ptr_, pool_size_, and OpenDDS::DCPS::AllocHeader::size().
bool OpenDDS::DCPS::MemoryPool::pool_free | ( | void * | ptr | ) |
Attempt to free an allocation. Return true if allocation is managed by this pool (and thus was freed).
Definition at line 376 of file MemoryPool.cpp.
References header, includes(), join_free_allocs(), pool_ptr_, pool_size_, and OpenDDS::DCPS::FreeHeader::set_free().
|
private |
Definition at line 438 of file MemoryPool.cpp.
References free_index_, OpenDDS::DCPS::FreeHeader::larger_free(), largest_free_, pool_ptr_, OpenDDS::DCPS::FreeIndex::remove(), OpenDDS::DCPS::FreeHeader::set_larger_free(), OpenDDS::DCPS::FreeHeader::set_smaller_free(), and OpenDDS::DCPS::FreeHeader::smaller_free().
Referenced by allocate(), and join_free_allocs().
|
inline |
Definition at line 187 of file MemoryPool.h.
|
friend |
Definition at line 163 of file MemoryPool.h.
|
private |
Index of free nodex.
Definition at line 197 of file MemoryPool.h.
Referenced by insert_free_alloc(), joinable_prev(), MemoryPool(), pool_alloc(), and remove_free_alloc().
|
private |
|
private |
Pointer to largest free index.
Definition at line 196 of file MemoryPool.h.
Referenced by insert_free_alloc(), joinable_prev(), MemoryPool(), pool_alloc(), and remove_free_alloc().
|
private |
Low water mark of available bytes.
Definition at line 193 of file MemoryPool.h.
Referenced by lwm_free_bytes(), MemoryPool(), and pool_alloc().
|
private |
Aligned minimum allocation size.
Definition at line 191 of file MemoryPool.h.
Referenced by pool_alloc().
|
private |
Pointer to pool.
Definition at line 194 of file MemoryPool.h.
Referenced by insert_free_alloc(), joinable_prev(), MemoryPool(), pool_alloc(), pool_free(), remove_free_alloc(), and ~MemoryPool().
|
private |
Configured pool size.
Definition at line 192 of file MemoryPool.h.
Referenced by joinable_prev(), MemoryPool(), pool_alloc(), and pool_free().