Voici un test rapide d'un cas simple: un programme pour lire une liste de nombres à partir d'une entrée standard et XOR tous les nombres.
version iostream:
#include <iostream>
int main(int argc, char **argv) {
int parity = 0;
int x;
while (std::cin >> x)
parity ^= x;
std::cout << parity << std::endl;
return 0;
}
version scanf:
#include <stdio.h>
int main(int argc, char **argv) {
int parity = 0;
int x;
while (1 == scanf("%d", &x))
parity ^= x;
printf("%d\n", parity);
return 0;
}
Résultats
En utilisant un troisième programme, j'ai généré un fichier texte contenant 33 280 276 nombres aléatoires. Les délais d'exécution sont:
iostream version: 24.3 seconds
scanf version: 6.4 seconds
La modification des paramètres d'optimisation du compilateur ne semble pas du tout modifier les résultats.
Donc: il y a vraiment une différence de vitesse.
EDIT: l' utilisateur clyfish souligne ci - dessous que la différence de vitesse est en grande partie due aux fonctions d'E / S iostream maintenant la synchronisation avec les fonctions CI / O. Nous pouvons désactiver cela en appelant à std::ios::sync_with_stdio(false);
:
#include <iostream>
int main(int argc, char **argv) {
int parity = 0;
int x;
std::ios::sync_with_stdio(false);
while (std::cin >> x)
parity ^= x;
std::cout << parity << std::endl;
return 0;
}
Nouveaux résultats:
iostream version: 21.9 seconds
scanf version: 6.8 seconds
iostream with sync_with_stdio(false): 5.5 seconds
C ++ iostream gagne! Il s'avère que cette synchronisation / vidage interne est ce qui ralentit normalement les entrées / sorties iostream. Si nous ne mélangeons pas stdio et iostream, nous pouvons le désactiver, puis iostream est le plus rapide.
Le code: https://gist.github.com/3845568