2014-04-17 16 views
1

简单的C代码可以使用libnuma库在NUMA系统中的特定内存节点中分配内存。例如,它可以使用以下功能完成:如何在特定NUMA内存节点上实例化C++对象?

void *numa_alloc_onnode(size_t size, int node) 

如何在一些内存节点中实例化一个类?一种方法,我能想到的是:

numa_set_membind(<nodemask>); 
o = new Object(); 
numa_set_localalloc(); 

这项工作?

回答

3

Placement new是你在找什么。例如:

void *blob = numa_alloc_onnode(sizeof(Object), ...); 
Object *object = new(blob) Object; 
+0

虽然要小心对齐要求。 –

+0

你如何取消分配? –

+2

此外,显然必须使用'numa_free()'来释放,所以要完成: 'object->〜Object(); numa_free(blob);' – shoban