OpenDDS
Snapshot(2023/04/07-19:43)
|
#include <MemoryPool.h>
Public Member Functions | |
FreeIndex (FreeHeader *&largest_free) | |
void | init (FreeHeader *init_free_block) |
void | add (FreeHeader *free_block) |
void | remove (FreeHeader *free_block, FreeHeader *next_largest) |
FreeHeader * | find (size_t size, unsigned char *base) |
Static Public Member Functions | |
static unsigned int | node_index (size_t size) |
Private Types | |
enum | { min_index_pow = 3, max_index_pow = 12 } |
enum | { min_index = 8, max_index = 4096 } |
Private Attributes | |
size_t | size_ |
Number of index nodes. More... | |
FreeHeader *& | largest_free_ |
Memory pool's pointer to largest free block. More... | |
FreeIndexNode | nodes_ [max_index_pow - min_index_pow+1] |
Index nodes. More... | |
Friends | |
class | Test::MemoryPoolTest |
class | Test::FreeIndexTest |
Index of free nodes in memory pool. Allows for a faster search of free nodes
Definition at line 118 of file MemoryPool.h.
|
private |
|
private |
|
explicit |
Definition at line 161 of file MemoryPool.cpp.
void OpenDDS::DCPS::FreeIndex::add | ( | FreeHeader * | free_block | ) |
Add free block to index
Definition at line 168 of file MemoryPool.cpp.
References node_index(), nodes_, OpenDDS::DCPS::FreeIndexNode::set_ptr(), and OpenDDS::DCPS::AllocHeader::size().
Referenced by init(), and OpenDDS::DCPS::MemoryPool::insert_free_alloc().
FreeHeader * OpenDDS::DCPS::FreeIndex::find | ( | size_t | size, |
unsigned char * | base | ||
) |
Find smallest free block of size or larger
Definition at line 209 of file MemoryPool.cpp.
References largest_free_, node_index(), nodes_, OpenDDS::DCPS::FreeIndexNode::ptr(), OpenDDS::DCPS::AllocHeader::size(), size_, and OpenDDS::DCPS::FreeHeader::smaller_free().
Referenced by OpenDDS::DCPS::MemoryPool::insert_free_alloc(), node_index(), and OpenDDS::DCPS::MemoryPool::pool_alloc().
void OpenDDS::DCPS::FreeIndex::init | ( | FreeHeader * | init_free_block | ) |
Initialize index with initial free block
Definition at line 198 of file MemoryPool.cpp.
References add(), max_index, min_index, nodes_, OpenDDS::DCPS::FreeIndexNode::set_sizes(), and size_.
Referenced by OpenDDS::DCPS::MemoryPool::MemoryPool().
|
static |
Calculate index of node corresponding to a size
Definition at line 243 of file MemoryPool.cpp.
References find(), max_index, max_index_pow, min_index, min_index_pow, nodes_, ACE_OS::printf(), OpenDDS::DCPS::AllocHeader::ptr(), OpenDDS::DCPS::FreeIndexNode::ptr(), OpenDDS::DCPS::AllocHeader::size(), OpenDDS::DCPS::FreeIndexNode::size(), size_, OpenDDS::DCPS::FreeHeader::smaller_free(), and TEST_CHECK.
Referenced by add(), find(), and remove().
void OpenDDS::DCPS::FreeIndex::remove | ( | FreeHeader * | free_block, |
FreeHeader * | next_largest | ||
) |
Remove free block from index
Definition at line 181 of file MemoryPool.cpp.
References node_index(), nodes_, OpenDDS::DCPS::FreeIndexNode::set_ptr(), and OpenDDS::DCPS::AllocHeader::size().
Referenced by OpenDDS::DCPS::MemoryPool::remove_free_alloc().
|
friend |
Definition at line 120 of file MemoryPool.h.
|
friend |
Definition at line 119 of file MemoryPool.h.
|
private |
Memory pool's pointer to largest free block.
Definition at line 153 of file MemoryPool.h.
Referenced by find().
|
private |
Index nodes.
Definition at line 154 of file MemoryPool.h.
Referenced by add(), find(), init(), node_index(), and remove().
|
private |
Number of index nodes.
Definition at line 152 of file MemoryPool.h.
Referenced by find(), init(), and node_index().