Maison >développement back-end >C++ >Les performances de C IOStream sont-elles réellement plus lentes que printf/scanf ?

Les performances de C IOStream sont-elles réellement plus lentes que printf/scanf ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 00:57:02935parcourir

Is C   IOStream Performance Actually Slower Than printf/scanf?

Comment optimiser les performances d'IOStream en C

Les utilisateurs de C préfèrent souvent la famille de fonctions printf/scanf à C IOStreams, malgré l'interface de ce dernier avantages. Les problèmes de performances sont souvent cités comme la principale raison de cette préférence.

Buffering

L'agrandissement de la taille de la mémoire tampon du streambuf sous-jacent peut améliorer considérablement les performances en réduisant les accès au disque dur et au système. appels. Cela se fait avec :

char Buffer[N];
std::ifstream file("file.txt");
file.rdbuf()->pubsetbuf(Buffer, N);

Gestion des paramètres régionaux

Les paramètres régionaux peuvent introduire une surcharge de performances en raison de la conversion de caractères, du filtrage et de la répartition dynamique. Définir les paramètres régionaux sur les paramètres régionaux C par défaut, ce qui désactive ces opérations, peut améliorer les performances :

std::locale::global(std::locale("C"));

Synchronisation

Synchronisation avec C stdio (std::ios_base : :sync_with_stdio(false)) n'offre aucun avantage observable en termes de performances.

Mesures

L'analyse comparative utilisant différents compilateurs et plates-formes révèle des résultats variables :

  • g 3.4.2 sur SUSE 10p3 : ~20 % de ralentissement pour C
  • g 4.7.2 sur Ubuntu 11.10 : C 25 % plus rapide
  • g 4.4.5 sur Ubuntu Linux 10.10 : C 17 % plus rapide
  • g sur macOS X : C 111 % plus lent
  • clang 3.8.0 sur Kubuntu 16.04 : C 66 % plus rapide

Ces résultats indiquent que les améliorations des performances d'IOStream varient en fonction des implémentations spécifiques. Par conséquent, il n’existe pas de solution universelle pour optimiser les IOStreams sur toutes les plateformes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn