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