0x90 → | bjone a écrit :
c'est une contre-optimisation votre truc car le contexte est bidon.
bien sûr si chaque fonction fait 0 ou 1 instruction assembleur (j'adore le res+=0), t'y gagne a faire un gros switch dégueulasse avec la seule instruction inlinée, plustôt qu'un call.
mais avec une fonction qui fait pas juste que nopper, le call depuis un tableau sera insignifiant, et passé un certain nombre de cas de switch, le call sera bien plus économique.
change tes res+= par des vraies fonctions (avec des boucles des machins et des bidules), et mets 16,20 fonctions tu vas voir le comportement va s'inverser.
|
Je suis pas trop d'accord, y'a de grandes chances que le switch ( à partir d'une certaine taille et si y'a pas de gros trou vers des valeurs importantes ) soit traduit par le compilo par un tableau, dans ce cas tu garde le temps d'accès constant quelque soit le nombre de switch ET la possibilité d'inliner. Je vois pas trop dans quelle situation alors le déréférencement de pointeur de fonction membre + le call peut alors être moins couteux, par contre j'ai vraiment l'impression que le tableau est une "optimisation" faite main de ce que le compilo ferait, en moins bien à cause de la difficulté accrue d'analyse des pointeurs pour le compilo.
( Sinon effectivement le contexte de test est bidon tant qu'il n'est pas exactement la chose qui sera exécutée ) ---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
|