Bonjour,
Pour la création d'un shoot them up, j'ai besoin de stocker beaucoup de "bullets" ( au moins 100 ) sachant que j'en détruis et crée très souvent et que je dois également les parcourir en entier à chaque frame.
Le tutoriel à cette adresse ( http://www.shmup-dev.com/forum/index.php?topic=1639.0 ) indique que le container le plus rapide à parcourir est un std::vector. Dans le cas d'un disque dur je comprends qu'un placement contigü évite des allers et retours à la tête de lecture mais dans le cas de la RAM est-ce vrai ?
voici ce qui est écrit dans le tutorial du lien précédent:
Il se trouve que j'utilise du polymorphisme pour gérer les différentes entités ( joueur,ennemis,bullets ). Dans mon vecteur je stocke alors des pointeurs IEntity*. Ces pointeurs sont contigüs mais comme il s'agit de pointeurs et non plus des valeurs, est-ce que je perds tout ou partie de l'avantage de contiguité offert par le vector ?The biggest factor is that we are going to want to iterate through the entire data set several times each frame for our various things we want to do with our bullets. Iteration through a list is significantly slower than through a vector due to a level of indirection caused by having to go through the next pointer. Since the actual processing on each bullet will be fairly minimal this performance hit can become a significant percentage of the total performance. Also no matter how we implement our bullets and lists we cant avoid the problem that whilst traversing the list we would be jumping around in memory all over the place which would thrash the cache, where as a vector will be stepping through memory contiguously which gives us the most efficient cache usage.
A chaque frame je dois donc parcourir près de 150 entités pour les mettre à jour,gérer les collisions,supprimer,créer tout en respectant leur ordre de création.
Je me demande donc quel est le container à priori le plus favorable pour cela ?
Merci
Partager