Cedric De Wilde wrote:
>On Fri, Aug 17, 2001 at 11:53:22AM +0200, Laurent Vuibert wrote:
>
>>Les instructions lente en programmations sont les suivantes
>> - les tests (if, for)
>> - les adressages index� ( tab[x+1] )
>>
>
>Tu pourrais expliquer un peu plus tab[x+1], d'apres le peu que je connait
>du c, ce devrait etre rapide puique c'est juste une adresse de base + le
>d�placement, non?
>
>A part que x+1 est une simple addition(donc assez rapide), je ne vois
>pas trop pq tu consideres ca comme lent.
>
ce que je veut dire c'est que 'tab' est un pointeur vers le premier
�lement du tableau
le fait de demand� tab[x+1] le programme r�alises les instructions suivantes
1: il charge x dans une variable apel� ici d
2: lecture de 1 dans e
3: il rajoute e a d
4: il rajoute la valeur de 'tab' a d
5: il lit la valeurs a l'adresse d
Ce qui fait beaucoup d'instructions pour une commande
ex le mauvait code suivant:
if(i=0; i<1500; i++)
{
tab[i]=tab[i]+1;
}
dans la boucle il se passe :
1: lecture de i dans 'd'
2: add d et de tab dans d
3: lecture de la variable a l'adress d dans e
4: lecture de 1 dans f
5: add e et f dans g
6: idem 1
7: idem 2
9: mise de g a l'adresse d
10: incr�mentation de i
11: soustraction de 1500 a i
12: test si la negatif alors �tape 1
et le code optimis�e par moi:
t=tab; i=1500
do{
*(t++)++;
while(--i);
dans la boucle
1: lecture de l'adresse t dans d
2: incr�mentation de 1 � l'adresse t
3: incr�mentation de l'adresse t de 1
4: d�crementation i
5: si i non null alors �tape 1
les �tape on �t� fait de t�te, si je voulais �tre rigoureux, il
aurait falut que je compile le code et que je regarde le code en
assembleur qui en r�sulte
les incr�mentation et d�crementation de 1 du stile "i++, --i" sont tr�s
rapide.
De plus en assembleur (tout programme ecrit en c est d'abord transcrit
en assembleur puis en langage machine) les instructions sont plus ou
moin rapide
l'unit� de temps es le cycle d'horloge t=1/f (f=fr�quence du processeur)
un incrementation de 1 peut prendre 1 cycle d'horloge alors que de
l'adressage index� (ex tab[8]) peut en prendre plus de 6
c'est temps diff�rre d'un model de processeur � un autre:
Si cela peut ouvrir vos l'enternes :-)
[ Soyez pr�cis dans vos sujets svp afin de d�terminer directement ]
[ le type de demande... ]
[ Pour vous (d�s)inscrire, aller sur http://unixtech.be/ml.php ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/ ]
[ http://unixtech.be Contact: [EMAIL PROTECTED] ]