我有几个自定义分配器,它们提供了基于不同策略分配内存的不同方法。其中之一在定义的 NUMA 节点上分配内存。分配器的接口很简单
template<typename config>
class NumaNodeStrategy
{
public:
static void *allocate(const size_t sz){}
static void *reallocate(void *old, size_t sz, size_t old_sz){}
static void deallocate(void *p, size_t sz){}
};
分配本身是使用hwloc_alloc_membind_nodeset()
具有为分配策略等设置的相应参数的方法处理的。但是,hwloc 仅提供分配和释放内存的方法,我想知道我应该如何实现reallocate()
。
两种可能的解决方案:
- 分配新的内存区域和
memcpy()
数据 - 用于
hwloc_set_membind_nodeset()
设置节点集的内存分配/绑定策略,使用普通malloc()
/posix_memalign()
和realloc()
.
任何人都可以帮助我解决这个问题吗?
更新:
我试图使问题更具体:是否有可能在不分配新内存和移动页面的情况下执行realloc()
使用?hwloc