les outils systems ne donnent que le temps globale d execution d un processus. Donc pour chrono, soit tu le fait a la main, soit tu fork ... quand le fork meurt, le temps d execution est une des valeurs de retour de l apli ... c est ce que retourne time sous bash ...
Pour gagner du temps : limite les acces disque, prefere tout metre en RAM ( si ca tiens ), puis evite les acces memoire repetes : prefere les traitemens consecutifs de la meme variable : si le compilo est intelligent, il laisse la valeur en registre, ce qui evite les acces RAM ... enfin, paufine bien tes boucles.
Si tu as des appels de fonctions a outrace, j ai remarque qu un passage par adresse est plus rapide que par valeur ( moins d allocation memoire ), mais une variable globale doit pouvoire faire mieux). Reflechi et cherche tout ce qui peut prendre du temps. evite les definitions de fonctions ; les fonctions inline vouees au remplacement acelerent aussi la chose. Enfin regroupe les operations consecutives en une seule instruction :
a=a+2;
a=2*a;
est plus lent que
a=2*(a+2);
j ai teste.
si deux boucles ont les meme bornes, regroupe les en une seule : tu gagne sur le traitement de la variable d incrementation ET sur le saut en arriere ...
Bref , si tu veux aprendre a programmer du C efficace, fait 6 mois d ASM ...
[^] # Re: Optimiser un programme C++
Posté par doublehp . En réponse au journal Optimiser un programme C++. Évalué à 5.
Pour gagner du temps : limite les acces disque, prefere tout metre en RAM ( si ca tiens ), puis evite les acces memoire repetes : prefere les traitemens consecutifs de la meme variable : si le compilo est intelligent, il laisse la valeur en registre, ce qui evite les acces RAM ... enfin, paufine bien tes boucles.
Si tu as des appels de fonctions a outrace, j ai remarque qu un passage par adresse est plus rapide que par valeur ( moins d allocation memoire ), mais une variable globale doit pouvoire faire mieux). Reflechi et cherche tout ce qui peut prendre du temps. evite les definitions de fonctions ; les fonctions inline vouees au remplacement acelerent aussi la chose. Enfin regroupe les operations consecutives en une seule instruction :
a=a+2;
a=2*a;
est plus lent que
a=2*(a+2);
j ai teste.
si deux boucles ont les meme bornes, regroupe les en une seule : tu gagne sur le traitement de la variable d incrementation ET sur le saut en arriere ...
Bref , si tu veux aprendre a programmer du C efficace, fait 6 mois d ASM ...