ca mérite une pelle d'or, de sortir un topic où la dernière intervention date de 2007
Imothep14 a écrit :
L'allocation avec un new ou un malloc prend à peu de chose près le même temps, cependant il y a deux choses à savoir :
1. Toujours utiliser le couple new/delete OU malloc/free ne surtout pas mixer les deux.
2. Dans les fonctions où la rapidité est cruciale, il faut éviter au maximum l'allocation dynamique qui ne permet pas au compilateur de prévoir l'espace mémoire nécessaire. De plus le delete va avoir ue tendance à fragmenter la mémoire et rendre l'les allocations plus lentes.
|
la différence entre malloc et new vient surtout de l'appel aux constructeurs des divers éléments de ton tableau. Pour les types non primitifs, ca peut coûter cher, et, suivant les cas d'utilisation, on va vouloir faire les initialisations à un autre moment (cas de la mémoire allouée via un reserve dans un vector, par exemple)
Imothep14 a écrit :
A priori, une boucle for et aussi rapide qu'un while. Cependant, les bornes de la boucle for sont évalués à chaque passage dans la boucle est non pas au début. Il faut donc déclarer les bornes en const avant la boucle (cela évite l'aliasing mémoire).
|
C'est pas seulement pour un problème d'alisaing qu'on sort les calculs de bornes : suivant les cas, on va vouloir éviter de réévaluer des appels de fonction potentiellement couteux.
Imothep14 a écrit :
Il faut préférer les switch (lorsqu'il y a plus de 2 tests) car ils sont gérés par une table de hashage donc plus rapide d'accés.
|
hashtable != jumptable. Mais dans l'idée, c'est ca
Imothep14 a écrit :
Toujours mettre un const quand on peut. Cela permet de spécifier au compilateur que la variable ne sera pas modifiée est il pourra donc optimiser le code en conséquence.
|
Y'a pas d'optim sur la constness, c'est juste de la propreté (rien ne t'empêche de virer un const dans ton code plus loin avec un const_cast)
Imothep14 a écrit :
Quand c'est possible, il faut utiliser un passage par référence (lisibilité + rapidité).
|
Il y a des cas où ca peut avoir du sens de passer une instance par valeur, tout dépend du contexte.
Imothep14 a écrit :
Bien sur ces optimisations ne sont à utiliser que dans les fonctions dites "critiques". La lisibilité du code est une des priorité du programmeur.
|
Là, il est plus question de généralité, rien qui nuise vraiment à la lisibilité, on n'est en fait même pas vraiemnt dans des questions d'optimisations mais plutôt de bonnes pratiques.
---------------
last.fm