IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

syntaxe pointeur ou tableau: différence de vitesse ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut syntaxe pointeur ou tableau: différence de vitesse ?
    bonjour,

    y'a t-il une différence de vitesse de lecture écriture entre la syntaxe pointeur ou tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    *(tabl+i)
    // ou
    tabl[i]

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 847
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par supernewbienoob Voir le message
    bonjour,

    y'a t-il une différence de vitesse de lecture écriture entre la syntaxe pointeur ou tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    *(tabl+i)
    // ou
    tabl[i]
    Aucune. Dans les 2 cas, le compilo se place sur tabl et décale de i éléments.

    Là où ça peut jouer, c'est dans un truc de ce genre
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i=0; i < n; i++)
         tabl[i]=...;
     
    for (i=0, pt=tabl; i < n; i++, pt++)
         *pt=...;

    Dans la première boucle, l'opération "positionnement au début et décalage" se fait à chaque itération.
    Dans la seconde boucle, ces deux opérations n'y sont plus, le pointeur étant déjà sur le bon élément...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 21
    Par défaut
    merci

  4. #4
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    ne pas oublier de remettre le pointeur au debut apres sinon tu vas droit vers le resultat inattendu au mieux et vers Seg default au pire.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 847
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilington Voir le message
    ne pas oublier de remettre le pointeur au debut apres sinon tu vas droit vers le resultat inattendu au mieux et vers Seg default au pire.
    Non. On initialise le pointeur avant de l'utiliser et non après l'avoir utilisé !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    on s'est pass compris. soit un pointer p,je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=0;i<4;i++)
    {
        *p=i;
        p++;
    }
    a la fin de ce code si je fais un printf("%d",*p) j'ai aucune des valeurs de i dans [0;4[
    donc je lui demande apres le p++ deplacer le pointer jusqu'a ca position de depart
    donc faire autant de p-- qu'il faut.
    j'ai pas parler d'initialiser le pointeur

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Dans la première boucle, l'opération "positionnement au début et décalage" se fait à chaque itération.
    C'est pas fait en hard ça ?

    genre en x86:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    movl    -4(%ebp, %edx, 4), %eax  # Full example: load *(ebp - 4 + (edx * 4)) into eax
    Par contre un compilateur pourra facilement optimiser la première boucle, mais pas forcément la seconde...

Discussions similaires

  1. Accès le plus rapide: Pointeur ou tableau?
    Par homeostasie dans le forum C
    Réponses: 21
    Dernier message: 01/09/2006, 14h08
  2. [VB.NET] Pointeur vers tableau
    Par b_lob dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 16h06
  3. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34
  4. Pointeur et TAbleau
    Par melmouj dans le forum C
    Réponses: 20
    Dernier message: 25/09/2005, 16h13
  5. [Syntaxe] Pointeur sur enregistrement : syntaxe exacte
    Par phplive dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2005, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo