OVH Cloud OVH Cloud

Surcout std::vector

8 réponses
Avatar
korchkidu
Bonjour,

une petite question a propos des couts calcul pour comparer les tableaux
a la C et les std::vector.
Est-ce que quelqu'un parmi vous a deja fait des tests pour voir si les
vector sont bcp plus lents que les tabelaux C?

Merci d'avance,
K.

8 réponses

Avatar
Fabien LE LEZ
On Mon, 12 Dec 2005 20:13:43 +0100, korchkidu :

Est-ce que quelqu'un parmi vous a deja fait des tests pour voir si les
vector sont bcp plus lents que les tabelaux C?


À usage identique, la différence est infime.
La principale différence, c'est que les éléments d'un tableau à la C
peuvent ne pas être initialisés. Exemple :

int tableau1 [TAILLE]; // Pas d'initialisation ; les valeurs
sont celles qui étaient en mémoire à cet endroit-là -- autant dire que
ce sont des valeurs aléatoires.

std::vector<int> tableau2 (TAILLE); // Tous les éléments sont
initialisés à 0, et ça prend du temps.


Si maintenant tu demandes à vector<> des choses en plus (vérification
de bornes avec at() ou par options de compilation, modification de la
taille avec push_back ou autre, etc.), tu ne peux pas comparer la
vitesse, puisque les tableaux à la C ne le font pas.

Avatar
loic.actarus.joly
J'en avais fait à une époque. Si tu as des tableaux C de petite
taille constante connue à la compilation, tu peux gagner le coût
d'une allocation mémoire par rapport à un vector, ce qui peut avoir
un impact.

Pour des tableaux dynamiques, j'ai même vu du code où les vectors
étaient plus rapides.
Avatar
Marc Boyer
Le 12-12-2005, korchkidu a écrit :
une petite question a propos des couts calcul pour comparer les tableaux
a la C et les std::vector.
Est-ce que quelqu'un parmi vous a deja fait des tests pour voir si les
vector sont bcp plus lents que les tabelaux C?


Qu'est-ce qui te fait dire que les vector seront plus lents ?

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain

Avatar
loufoque

une petite question a propos des couts calcul pour comparer les tableaux
a la C et les std::vector.



Tu as boost::array aussi si tu n'as pas besoin de la modification de taille.

Avatar
korchkidu
Marc Boyer wrote:

Qu'est-ce qui te fait dire que les vector seront plus lents ?
Ah, parce qu'ils sont plus rapides?


K.

Avatar
korchkidu
wrote:

J'en avais fait à une époque. Si tu as des tableaux C de petite
taille constante connue à la compilation, tu peux gagner le coût
d'une allocation mémoire par rapport à un vector, ce qui peut avoir
un impact.
De quelle allocation memoire tu parles?

Je ne vois pas.
Mais disons que dans le cas ou le tableau est deja tout initialise bien
et que la taille ne changera plus (on ne veut que l'iterer et
toussa...), que se passe t-il?
Ca semble etre la meme chose apparemment...non?

K.

Avatar
Marc Boyer
Le 14-12-2005, korchkidu a écrit :
Marc Boyer wrote:

Qu'est-ce qui te fait dire que les vector seront plus lents ?
Ah, parce qu'ils sont plus rapides?



Je suis prêt à parier mon café de la pause que, pour une
utilisation intensive avec redimensionnements, std::vector
sera plus performant que l'implémentation que tu en feras
avec les tableaux 'à la C'.

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain


Avatar
loic.actarus.joly

Mais disons que dans le cas ou le tableau est deja tout initialise bien e t que la taille ne changera plus (on ne veut que l'iterer et toussa...), qu e se passe t-il?
Ca semble etre la meme chose apparemment...non?



Pour simplement itérer, je n'ai pas vu d'avantages significatifs à
l'un ou l'autre. Selon les tests, l'un ou l'autre étaient plus
rapides.

--
Loïc