这适用于游戏引擎中的内存管理器.我有一个freelist实现,并希望有一个编译时列表,如果这些.(例如,MPL或Fusion矢量).这freelist对应于分配大小,当分配/解除分配大小小于常量的对象时,它们将转到相应的freelist.
最后,这意味着全局小对象分摊了常量时间分配和恒定时间释放.(好极了.)
问题是生成我需要的类型,所以我最终可能会使用Fusion来实例化这些类型.使用的类型是(缩短等):
template <size_t N>
struct data_block
{
size_t mSize; // = N
char mData[N];
};
template <typename T, size_t ElementsPerPage,
template <typename> class Allocator = std::allocator >
class freelist { /* ... */ };
template <typename T>
class callocator; // allocator that uses malloc/free
Run Code Online (Sandbox Code Playgroud)
的freelist的将管理data_block的权力,以2的大小S,从最小去一个最大起动.所以我想要的是:
static const size_t MinimumSmallSize = 4; // anything smaller gets rounded up
static const size_t MaximumSmallSize = 512; // anything bigger …Run Code Online (Sandbox Code Playgroud)