24 #include "cheetah/data/detail/CachingAllocatorImplBase.h" 25 #include "panda/Log.h" 26 #include "panda/Error.h" 32 template <
typename DerivedType,
typename T>
37 template <
typename DerivedType,
typename T>
44 template <
typename DerivedType,
typename T>
47 std::lock_guard<std::mutex> lock(_mutex);
51 typename FreeBlocksType::iterator free_block = _free_blocks.find(num_elements);
53 if(free_block != _free_blocks.end())
56 result = free_block->second;
59 _free_blocks.erase(free_block);
69 result = DerivedType::_allocate(num_elements);
71 catch(std::runtime_error &e)
73 throw panda::Error(e);
78 _allocated_blocks.insert(std::make_pair(result, num_elements));
82 template <
typename DerivedType,
typename T>
85 std::lock_guard<std::mutex> lock(_mutex);
87 typename AllocatedBlocksType::iterator iter = _allocated_blocks.find(ptr);
88 std::size_t num_elements = iter->second;
89 _allocated_blocks.erase(iter);
92 _free_blocks.insert(std::make_pair(num_elements, ptr));
95 template <
typename DerivedType,
typename T>
98 std::lock_guard<std::mutex> lock(_mutex);
100 for(
typename FreeBlocksType::iterator i = _free_blocks.begin();
101 i != _free_blocks.end();
105 DerivedType::_free(i->second);
108 for(
typename AllocatedBlocksType::iterator i = _allocated_blocks.begin();
109 i != _allocated_blocks.end();
113 DerivedType::_free(i->first);
Some limits and constants for FLDO.
T * allocate(std::size_t num_elements)
Allocate memory.
CachingAllocatorImplBase()
Create a new instance.
Base class for CachingAllocator implementations.
void deallocate(T *ptr, std::size_t)
Deallocate memory.