Salut,
Je viens tout juste de récupérer un projet C++ que je dois faire évoluer.
Mon problème réside certaines obscures optimisations d'une partie en C de l'équipe précédente et notamment une qui me laisse perplexe.
J'ai la fonction suivante :
1 2 3 4 5 6 7 8 9 10 11 | void send( bool appelBidon ) { long a; long b; char c[100]; if ( !appelBidon ) { /* Enorme bloc d'instructions qui consiste à créer un message binaire de 100 octets et l'émettre sur une socket */ } } |
Les variables a et b contiennent des durées basées sur l'heure système. La variable c contient le message à émettre.
Cette fonction est appelée comme suit :
1 2 3 4 5 6 | while ( 1 ) { send( true ); [...] send( false ); } |
En gros, j'appelle une première fois ma fonction en exécutant uniquement les déclarations des variables locales. Puis, je l'appelle réellement un peu plus loin dans ma boucle.
Dans la documentation, j'ai la remarque suivante sur ce bout de code : Premier appel bidon pour optimisation. send() prend du temps et cela permet de mettre en cache.
J'ai beau essayé de comprendre, je ne vois absolument pas où il peut bien y avoir une optimisation, là-dedans (surtout que dans tous les cas, nous sommes cadencés à 200ms). J'ai bien pensé à la mise en cache des variables locales, mais ça ne tient pas la route…
Je ne me suis pas fait prié pour supprimer tout ça (le projet y survivra sans problème). Mais je voudrais bien comprendre ce qu'ils ont tenté de faire et, peut-être, suis-je passé à côté de quelque chose. Alors, est-ce qu'il s'agit vraiment d'une optimisation ou simplement d'une aberration ?