jderf
Messages postés189Date d'inscriptionmercredi 29 décembre 2004StatutMembreDernière intervention 2 octobre 2014
-
4 janv. 2010 à 12:38
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
5 janv. 2010 à 09:16
Bonjour,
J'avais une procedure dans laquelle j'utilisait la fonction FillChar avec un tableau statique. J'ai modifié cette procedure, pour avoir un tableau de taille variable. Seulement, maitenant la procedure FillChar ne fonctionne pas correctement avec le tableau dynamique
Salut Guillemouze : je suis d'accord avec toi sauf que SizeOf(BufSource[0]) renvoit içi 1 donc là on peut s'en passer et du reste en le faisant on optimise le code
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 4 janv. 2010 à 16:24
@francky : tout a fait, ca ici on bosse avec des char. Par contre, si c'est un array de autre chose, il vaut mieux utiliser le SizeOf au cas ou la taille de ce type change. D'ailleurs, c'est peut etre dangereux car D2010 n'utilise-t'il pas des widechar et non pas des ansiChar pour les "char" ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ensuite, il faut savoir que le compilateur cherche à faire le maximum de calculs à la compilation, toujours dans l'optique d'avoir les meilleurs performances possibles. Donc écrire 2 * 2 dans le source revient à écrire 4 dans le code qui sera exécuté. C'est d'ailleurs très pratique pour avoir un code à la fois lisible et performant genre ITEM_COUNT * ITEM_SIZE. Et multiplier par 1 revient à... Ne rien faire du tout ! Donc :
Length(BufSource) * 1
->
Length(BufSource)
Preuve :
Dans le premier cas, SizeOf renvoie 1, donc la valeur renvoyée par random est directement affichée. ShowMessage(IntToStr(a)); génère exactement le même code.
Dans le deuxième cas, SizeOf renvoie 3, donc la valeur renvoyée par random est multipliée par 3 (a + a * 2) avant d'être affiché. Détail amusant, la multiplication ne coûte pratiquement pas plus chère (Dépend de la qualité du processeur) car réalisée dans un lea (Technique classique d'optimisation réalisable sur les petits entiers).
Bref, parfois être verbeux ou compatible D 2010, ça ne coûte pas plus chère !