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 :

Variables register et auto


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut [résolu]Variables register et auto
    bonjour,
    dans mon bouquin (année : 1998) de C, il est dit que les vars register ont un accès plus rapide que les int...

    j'ai constaté le contraire... c'est normal ?

  2. #2
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut
    Techniquement, un registre est tjrs plus rapide qu'un accès mémoire.

    Mais register n'est qu'une recommandation faite au compilateur. Rien ne l'oblige à les suivre, ni, surtout, à mettre dans des registres des variables, ce qu'il sait faire de lui-même.

    Il se peut que lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int a;
    register int b;
    a soit placé dans un registre et b non

  3. #3
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    et ya pas un moyen de savoir si une variable est définie en tant que register comme prévu ou si elle est définie en auto ?
    faire un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    si (a = type register)
    	affiche "a = register"
    si (a = type auto)
    	affiche "a = auto"

  4. #4
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut
    Non il n'a pas de moyen de connaître depuis le C ainsi. Par contre si ton compilateur accepte de générer un ASM au lieu de directement du binaire, tu pouras vérifier là, mais pas de manière automatique (et lire l'asm produit par un compilateur est très ardu). Enfin, register est une extension au langage C introduite par Borland.

    Par contre je serais intéressé de savoir comment tu as pu mesurer la différence de performance entre la variable sans register et celle avec

  5. #5
    Membre confirmé

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par défaut
    Citation Envoyé par Anomaly
    lire l'asm produit par un compilateur est très ardu
    Le fichier .asm contient en général les numéros des lignes correspondant au code C... donc regarder si la variable est mise dans un registre, c'est pas si ardu que ça... si tu utilises GCC ou LCC en tous cas (j'ai pas essayé sous d'autres compilos)

  6. #6
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    oué, ça tombe bien, j'utilise gcc sous win (dev-cpp) et linux.

    j'ai mesuré les temps d'accès très simplement avec les différences d'heures et des boucles for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <stdio.h>
    #include <time.h>
     
    main()
    {
    long start, end;
    int a1, a2;
    register int r1, r2;
    system("clear");
    printf("\n\nLe programme compare les durées d'éxécution\n"
    " d'une boucle de comptage");
     
    time(&start);
    for(a1 = 1; a1<=100000;a1++)
    	for(a2=1;a2<=100000;a2++)
    	;
    time(&end);
    printf("\nLa boucle auto demande %ld secondes.", end-start);
     
    time(&start);
    for(r1=1;r1<=100000;r1++)
    	for(r2=1;r2<=100000;r2++)
    	;
    time(&end);
    printf("\nLa boucle register demande %ld secondes", end-start);
    }
    et j'obtiens (si je me souviens bien), 4 secondes pour la boucle auto et 7 pour la boucle register.
    j'ai compilé ce code sous linux

  7. #7
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    linux est un multitache préemptif. Ton test n'est donc pas significatif.
    Il faudrait bloquer le scheduler (je ne sais pas si c'est possible).

    (register n'est pas une invention borland mais K&R)

  8. #8
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    ok, je vais essayer sous zin...

  9. #9
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    pareil.
    c'est sous dos qu'il faudrait l'essayer.
    et avec un disable()/enable() pour pas te prendre une it

  10. #10
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    tu pourrais m'expliquer un peu plus stp ?


  11. #11
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    Ce que tu peux faire aussi c'est essayer de baire une batterie de tests. Genre 1000 tests et tu fais une moyenne. ce sera déjà plus significatif.
    Et sinon pour shunter la préemption tu peux essayer de mettre le processus en haute priorité. Comme ça même si il est interrompu, c'est pas pour longtemps parce qu'il y aura que les processus systèmes qui lui passeront dessus.

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    register ne doit plus être utilisé. Il est d'ailleur ignoré par les compilos.

  13. #13
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    C'est fort possible ça. Parce que c'est une vieille instruction. Il y a 20 ans ça devait être très utile mais maintenant...

  14. #14
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    He bien si tu veux faire une boucle significative il ne faut pas qu'au milieu de ta boucle l'ordonnanceur (win ou linux) switche sur une autre thread ou process.

    Dos étant monotache ça ne peut pas arriver, par contre une interruption matérielle (une irq) peut se déclancher (l'int 8 le timer par exemple)
    disable() sert à interdire aux irq de se déclancher.
    (et enable() remets les interruptions)

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Par défaut
    Salut
    En effet j'ai pu lire que le mot clé register est désuet.
    A bientot

  16. #16
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    C'est aund même dangereux de bloquer les interruptions.

  17. #17
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Sous win/nux il suffit de mettre en priorite haute pour limiter le problème. Et sur une durée raisonable de test ca joue pas bcp.

  18. #18
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    bon ok, j'arrête d'utiliser les var register...


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. dernier auto-increment vers une variable
    Par H-bil dans le forum C#
    Réponses: 22
    Dernier message: 06/06/2008, 08h09
  2. Formulaire auto submit post variables
    Par djanke dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/08/2007, 22h48
  3. [POO] [register-globals] Problème de variable
    Par Neuromancien2 dans le forum Langage
    Réponses: 13
    Dernier message: 06/07/2006, 11h57
  4. [Tableaux] Numéro auto + variable
    Par vincedjs dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2006, 16h04
  5. Variables automatiques et mot clé auto, variables register.
    Par Évariste Galois dans le forum C++
    Réponses: 6
    Dernier message: 11/08/2005, 20h30

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