2014-04-17 1 views
1

Le code C simple peut utiliser la bibliothèque libnuma pour allouer de la mémoire dans un nœud de mémoire spécifique dans un système NUMA. Par exemple, il peut être fait en utilisant la fonction suivante:Comment instancier des objets C++ sur des nœuds de mémoire NUMA spécifiques?

void *numa_alloc_onnode(size_t size, int node) 

Comment instancier une classe dans un nœud de mémoire? Une façon, je peux penser à est:

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

Est-ce que cela fonctionnera?

Répondre

3

Placement new est ce que vous cherchez. Exemple:

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

Bien que vous fassiez attention aux exigences d'alignement. –

+0

Comment vous libérez-vous? –

+2

Aussi, apparemment on doit libérer en utilisant 'numa_free()', donc être complet: 'object-> ~ Object(); numa_free (blob); ' – shoban

Questions connexes