Première rédaction de cet article le 25 juin 2009
Dernière mise à jour le 30 juin 2009
Comme le savent les lecteurs de ce blog, je suis en général très méfiant vis-à-vis de l'optimisation prématurée des programmes. Pas seulement parce que la plupart des programmeurs qui parlent de performance tout de suite ne mesurent pas le résultat de leurs bricolages mais aussi parce que cette « optimisation » est souvent un prétexte pour faire du code imbittable et inmaintenable. Mais, comme avec toute règle, il y a des exceptions.
Par exemple, si une fonction donnée est appelée très souvent, elle
est évidemment une bonne candidate pour des optimisations très
poussées. C'est le cas de strlen
,
fonction de la libc
qui mesure la longueur d'une chaîne de caractères en
C. Les programmes écrits en C (ce qui inclue
les implémentations des langages comme Ruby ou
Perl) appellent strlen
tout le temps. On peut donc, une fois une mise en œuvre correcte
de strlen
produite, chercher des
optimisations de bas niveau.
Il est par exemple amusant de comparer les deux versions produites par OpenBSD :
La GNU libc dispose également d'une telle
version optimisée sur les i386 (version en
assembleur pour i586 et plus). Voir aussi un bon article sur l'écriture
en assembleur de strlen
. Évidemment,
strcmp
serait encore plus
intéressante à étudier, car plus complexe (les deux chaînes n'ont pas
forcément la même longueur).
Une autre curiosité pour les amateurs d'optimisation est la discussion sur un strlen() rapide pour UTF-8.
Merci à Victor Stinner pour ses intéressants ajouts.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)