Merci beaucoup pour cette explication.

Cedric

On Fri, Aug 17, 2001 at 10:04:21PM +0200, Laurent Vuibert wrote:
> 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]  ]

[ 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]  ]

Répondre à