Je suis jongler avec l'assistant de performance dans VS2010, celui qui teste l'instrumentation (fonction nombre d'appels et le calendrier.)C++ performance vectorielle résultat non intuitif?
Après avoir appris des vecteurs dans la STL C++, j'ai décidé de voir ce que les informations que je peux obtenir sur la performance de remplir un vecteur avec 1 million d'entiers:
#include <iostream>
#include <vector>
void generate_ints();
int main() {
generate_ints();
return 0;
}
void generate_ints() {
typedef std::vector<int> Generator;
typedef std::vector<int>::iterator iter;
typedef std::vector<int>::size_type size;
Generator generator;
for (size i = 0; i != 1000000; ++i) {
generator.push_back(i);
}
}
Ce que je reçois est: 2402.37 millisecondes de temps écoulé pour ce qui précède. Mais j'ai appris que les vecteurs doivent se redimensionner quand ils manquent de capacité car ils sont contigus dans la mémoire. Donc, je pensais obtenir de meilleures performances en faisant un ajout à ce qui précède était:
generate.reserve(1000000);
Cependant ce double le temps d'exécution du programme à environ 5000 millisecondes. Voici une capture d'écran des appels de fonction, côté gauche sans la ligne de code ci-dessus et côté droit avec. Je ne comprends vraiment pas ce résultat et cela n'a aucun sens compte tenu de ce que j'ai appris sur la façon de définir une capacité de vecteurs si vous savez que vous allez le remplir avec une tonne est une bonne chose. La spécification de réserve a pratiquement doublé la plupart des appels de fonction.
Je me demande aussi ce qu'est ce _RTC_CheckESP qui est toujours la fonction la plus souvent appelée. –
Comment compilez-vous le code? Quel compilateur, et avec ou sans optimisations? – jalf
Je viens d'installer une nouvelle version de Visual studio ultimate 2010, je n'ai pas fait d'optimisation car je n'ai pas appris comment. Donc, je viens d'appuyer sur le bouton vert essentiellement. En cliquant sur l'assistant de performance, cela fonctionne pour moi. –