2014-04-17 15 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