On May 6, 9:23 am, Michael DOUBEZ <michael.dou...@free.fr> wrote:
> Fabien LE LEZ a écrit :
> > On Mon, 5 May 2008 02:42:08 -0700 (PDT), James Kanze
> > <james.ka...@gmail.com>:
> >> Selon les implémentations, il peut y avoir plus ou moins de
> >> différences de performances entre iostream et FILE*. En général,
> >> en faveur des FILE* (mais ce n'est pas forcement universel).
> > Ce que je ne comprends pas, c'est pourquoi mon
> > implémentation (bricolée en quelques minutes) est très
> > largement plus rapide que "operator >> (istream&, double&)".
> > D'autant que je commence par lire une ligne dans un string
> > avec getline(), puis je parse cette chaîne (en faisant les
> > vérifications qui vont bien), alors que operator>> ne passe
> > pas par cette étape intermédiaire.
> Peut être l'indirection causée par le codecvt. Ton code ne
> prends pas en compte la localisation bien que ça n'explique
> pas un facteur 4.
La localisation coûte cher dans std::filebuf. Ailleurs, ça
dépend; d'après ce qu'on m'a dit, c'est possible d'en minimiser
le coût. (Au moins une personne m'a dit la même chose pour
std::filebuf. Mais il avoue que c'est assez compliqué, et que
les implémentations aujourd'hui ne le font pas.)
> > Comme je ne pense pas être meilleur que les auteurs de g++
> > dans leur propre domaine, je me doute qu'il y a une
> > explication quelque part, mais je ne vois pas où. Et on ne
> > parle pas ici de quelques % de différence, mais bien d'un
> > facteur 4 (grosso modo).
> Ou peut être il n'y a pas eu d'effort de la part des auteurs
> de g++ pour optimiser iostream.
> D'après B.Stroustrup, iostream est plus rapide (en
> théorie)http://www.research.att.com/~bs/new_learning.pdf.
Attention. La date sur cet article est 1999. Ce qui fait penser
qu'il parle des iostream classique, et non des iostream
standard. La gestion de la facette codecvt dans filebuf rend
l'optimisation nettement plus difficile.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34