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

Répondre à