Une carte et de jeu qui utilise de la mémoire contiguë et dispose d'une réserve de fonction

- Je utiliser plusieurs cartes et des ensembles. Le manque de mémoire contiguë, et le nombre élevé de (de)les allocations, est un goulot d'étranglement des performances. J'ai besoin d'un principalement STL-compatbile de la carte et de l'ensemble de la classe qui peut utiliser un bloc contigu de mémoire pour les objets internes (ou plusieurs blocs). Il doit également avoir un reserve fonction de sorte que je peux préallouer pour les tailles attendues.

Avant d'écrire mon propre je voudrais vérifier ce qui est disponible en premier. Est-il quelque chose de Boost qui fait cela? Est-ce que qqn sait de la mise en œuvre ailleurs?


Intrusive types de collection ne sont pas utilisables ici que les mêmes objets doivent exister dans plusieurs collections. Autant que je sache, STL pools de mémoire, par type, pas par exemple (sorte de, sorte de non, de nombreuses mises en garde). Ces piscines ne sont pas efficaces à l'égard de la mémoire de la localité multi-cpu/core de traitement.

Objet piscines ne fonctionnent pas comme les types seront partagés entre l'instance, mais leur piscine ne devrait pas.

Dans de nombreux cas, une carte de hachage peut être une option.

  • Pouvez-vous utiliser la STL map et set conteneurs avec un noeud personnalisé allocateur? (Par exemple, Visual C++ Standard Library fourni avec un ensemble de coutume allocateurs avec différentes caractéristiques de performance (je suis sûr qu'il ya d'autres allocateurs disponibles qui sont plus portable; ceux là sont les premiers qui viennent à l'esprit).)
  • c'est ce que je voulais dire avec l'objet de piscines. STL ne supporte pas par exemple allocateurs, par type d'allocateurs.
  • Objet de la piscine est le rightest façon de gérer la mémoire liés à des problèmes de performances. Je changerais les autres conditions pour faire l'objet d'bassins pourrait être utilisé. Par ailleurs, vous pouvez stocker des objets réels dans un vecteur ou deque et l'utilisation de la carte/jeu seulement pour la référence/pointeur.
  • Normal STL carte/jeu de est généralement soutenu par équilibrée structure de l'arbre. Donc, si l'on rend la mémoire contiguë de la carte/set, beaucoup de possibilités sont là, il sera la mémoire inefficace mise en œuvre. D'autre part, si vous pouvez déterminer ensemble de données de taille de la clé ou de la diversité, vous peut utiliser hachage de la carte/set. De hachage basée sur les conteneurs sont plus susceptibles d'être la mémoire contiguë.
  • les pools de mémoire doit être par exemple dans le but de profiter de per-core la mémoire de la localité. Par le partage d'une piscine, je vais partager trop de segments de mémoire à travers les cœurs. Je suis déjà à l'aide de pointeurs. Je vais envisager de hachage cartes comme une possibilité.
  • hein? C'est peu probable de faire une différence mesurable. Sonne comme l'optimisation prématurée.