如何在特定的 NUMA 内存节点上实例化 C++ 对象?
Posted
技术标签:
【中文标题】如何在特定的 NUMA 内存节点上实例化 C++ 对象?【英文标题】:How to instantiate C++ objects on specific NUMA memory nodes? 【发布时间】:2014-04-17 20:20:16 【问题描述】:简单的 C 代码可以使用libnuma
库在 NUMA 系统中的特定内存节点中分配内存。例如,可以使用以下函数来完成:
void *numa_alloc_onnode(size_t size, int node)
如何在某个内存节点中实例化一个类?我能想到的一种方法是:
numa_set_membind(<nodemask>);
o = new Object();
numa_set_localalloc();
这行得通吗?
【问题讨论】:
【参考方案1】:Placement new 是您正在寻找的。示例:
void *blob = numa_alloc_onnode(sizeof(Object), ...);
Object *object = new(blob) Object;
【讨论】:
虽然请注意对齐要求。 你如何解除分配? 另外,显然必须免费使用numa_free()
,所以要完整:object->~Object(); numa_free(blob);
@BenVoigt:如何正确对齐?
@shoban 这是一个*** 问题,关于如何使用 numa 进行对齐分配以上是关于如何在特定的 NUMA 内存节点上实例化 C++ 对象?的主要内容,如果未能解决你的问题,请参考以下文章