如何在特定的 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-&gt;~Object(); numa_free(blob); @BenVoigt:如何正确对齐? @shoban 这是一个*** 问题,关于如何使用 numa 进行对齐分配

以上是关于如何在特定的 NUMA 内存节点上实例化 C++ 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NUMA 机器上的不同节点上分配数组的一部分?

MySQL Hardware--NUMA与MySQL

如何将所有内存分配限制到一个 NUMA 节点

有没有办法为 NUMA 中的数据分配特定的内存?

虚拟机NUMA和内存KSM

如何在 Windows 上将 c++11 线程关联设置为 NUMA 节点?