Salut,
il y a un truc qui me turlupine depuis quelques jours.
Observez donc ce rapport quick bench:
http://quick-bench.com/IHmmxt68FTep6DqRaD3yxRTU7g0
Je compare trois méthodes de construction et de remplissage d'un std::vector :
Première méthode (reserve) : Je construis un vector vide, puis je réserve la taille dont j'ai besoin, puis je le remplis
Deuxième méthode (construct) : Je construis un vector directement alloué, puis je le remplis
Troisième méthode (cstyle): J'alloue un tableau "c-style", puis je le remplis
On voit que le reserve est aussi rapide que le cstyle. Ce qui est normal, puisque le reserve fait un malloc.
Mais on voit aussi que de construire directement le vector est sensiblement plus lent. Ce qui, il me semble, est dû au fait que le constructeur de vector appelle le constructeur par défaut de chaque objet qu'il contient.
La question que je me pose, dans cette histoire, c'est si la première méthode (reserve) n'est pas dangereuse ?
Car finalement, ce qu'on fait dans ce cas, c'est juste allouer de la mémoire, mais on a aucun filet. Quels sont les risques qu'impliquent cette façon de faire ?
Partager