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 :

bout de code à dechifrer svp


Sujet :

C

  1. #21
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...[/code]
    ou d'utiliser printf() avec "%s"... Sans doute trop simple...
    Pas de Wi-Fi à la maison : CPL

  2. #22
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...[/code]
    ou d'utiliser printf() avec "%s"... Sans doute trop simple...
    en même temps, il y a un wait(20) entre chaque affichage de caractère.
    J'ai pas bien compris ce que faisait le wait(20),
    ça a l'air d'avoir à voir avec des threads et/ou des signaux.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #23
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ggnore
    Je ne vois pas pourquoi se priver d'un gain de temps .
    On saura si on a gagné du temps le jour où on aura fait des mesures dans des conditions reproductibles... Se méfier des apparences.

    Prendre aussi en compte le degré d'optimisation du compilateur qui peut très bien, après avoir compris l'intention du programmeur, choisir la stratégie de codage la plus efficace. Et je ne parle pas des pipelines et autres architectures complexes à prédiction...

    Pour ces raisons, ce qu'on a pu écrire sur 'tableau vs pointeur' dans les années 80' à propos du langage C n'est plus si évident de nos jour avec les UC et compilateurs modernes...

    Le seul critère objectif reste la mesure.
    Pas de Wi-Fi à la maison : CPL

  4. #24
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pouic
    Sur toutes les implementations que j'ai rencontrees, la place prise en memoire pour un pointeur est celle d'un entier.
    Tu n'as pas du faire beaucoup de x86 en mode réel!
    Pas de Wi-Fi à la maison : CPL

  5. #25
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ggnore
    En même temps l'espace mémoire occupé par une donnée est composée de son adresse et de sa valeur, non ?
    L'adresse est une constante. Elle ne prend pas de place. C'est la valeur qui occupe une place en mémoire. Plus exactement, c'est la variable (l'objet). La valeur est le contenu de cette variable.
    l'adresse d'un double long aura la même taille que celle d'un char,
    Peut être...
    mais au final la donnée double long prendra tout de même plus de place en mémoire, non ?
    Oui, mais ça veut pas dire que le traitement d'une telle donnée sera plus lent ou plus rapide...
    L'optimisation ne mène pas nulle part, j'en suis sûr.
    Fait des mesures objectives avant de te prononcer...
    D'ailleurs en voyant ce thread, je me suis dit que j'utiliserais peut être des unsigned char plutôt que des int, maintenant, pour les petites boucles qui nécessitent un indice.
    Erreur. Il est recommandé d'utiliser toujours des int ou unsigned int (taille 'naturelle des objets vu du processeur) pour les travaux courants. Un char tout seul utilisé comme petit entier génère souvent plus de code, car il faut l'étendre en int pour le traiter dans les registres internes du processeur...

    Idem pour les paramètres, on a jamais vu de paramètre de type [signed ]|[unsigned ]char dans la bibliothèque standard du C. Normal, tout paramètre 'char' est converti en 'int' automatiquement (idem pour 'short'). Cette conversion n'est pas gratuite.
    Pas de Wi-Fi à la maison : CPL

  6. #26
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ggnore
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Popof
    En meme temps le gars kia codé ce for avait envie de se prendre la tete, c'est quand meme plus simple de faire tourner un i de 0 a la taille de la chaine...[/code]
    ou d'utiliser printf() avec "%s"... Sans doute trop simple...
    en même temps, il y a un wait(20) entre chaque affichage de caractère.
    J'ai pas bien compris ce que faisait le wait(20),
    ça a l'air d'avoir à voir avec des threads et/ou des signaux.
    Ok, dans ce cas un putchar() aurait été plus léger...
    Pas de Wi-Fi à la maison : CPL

  7. #27
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par ggnore
    En même temps l'espace mémoire occupé par une donnée est composée de son adresse et de sa valeur, non ?
    L'adresse est une constante. Elle ne prend pas de place. C'est la valeur qui occupe une place en mémoire. Plus exactement, c'est la variable (l'objet). La valeur est le contenu de cette variable.
    l'adresse d'un double long aura la même taille que celle d'un char,
    Peut être...
    ...
    paramètre 'char' est converti en 'int' automatiquement (idem pour 'short'). Cette conversion n'est pas gratuite.


    A quoi est ce qu'on peut se fier alors pour tenter d'optimiser du code ?

    Si ça ne vaut rien d'essayer de mettre de types de variables le plus prêt possible du domaine de valeur d'une variable, je ne comprends plus rien.

    Comment optimiser du code alors ?

    A part tatonner et tester la vitesse d'éxécution ?
    Faut il absolument connaître le fonctionnement interne du résultat compilé par le C ? Faut il comprendre comment ce résultat dialogue avec la machine ? Est ce que ça dépend beaucoup de la machine ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  8. #28
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    ok ok merci pour vos reponses elles m'ont été tres utiles encore merci
    Equipe SG1 au rapport!

  9. #29
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour comparer deux codes C, il faut comparer la sortie ASM car les compilateurs optimisent beaucoup

  10. #30
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ggnore
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par ggnore
    En même temps l'espace mémoire occupé par une donnée est composée de son adresse et de sa valeur, non ?
    L'adresse est une constante. Elle ne prend pas de place. C'est la valeur qui occupe une place en mémoire. Plus exactement, c'est la variable (l'objet). La valeur est le contenu de cette variable.
    l'adresse d'un double long aura la même taille que celle d'un char,
    Peut être...
    ...
    paramètre 'char' est converti en 'int' automatiquement (idem pour 'short'). Cette conversion n'est pas gratuite.


    A quoi est ce qu'on peut se fier alors pour tenter d'optimiser du code ?

    Si ça ne vaut rien d'essayer de mettre de types de variables le plus prêt possible du domaine de valeur d'une variable, je ne comprends plus rien.

    Comment optimiser du code alors ?

    A part tatonner et tester la vitesse d'éxécution ?
    Faut il absolument connaître le fonctionnement interne du résultat compilé par le C ? Faut il comprendre comment ce résultat dialogue avec la machine ? Est ce que ça dépend beaucoup de la machine ?
    Optimiser pourquoi faire ?

    L'expérience montre que pour gagner en efficacité, il faut :
    • Ecrire le code normalement sans astuces particulière, mais en veillant comme toujours à ce qu'il n'y ai ni bug (facile) ni comportement indéfini (difficile...)
    • Passer le code au profiler pour voir quelles sont la ou les fonctions les plus utilisées.
    • Faire des mesures sur ces fonctions (facile, suffit d'instrumenter le test unitaire...).
    • Voir si on peut améliorer l'algorithme (éviter les redondances, les parcours de listes et de tableaux imbriqués etc.)
    • Monter le niveau d'optimisation du compilateur
    • En dernier seluement, faire les micro optimisations. En fait, c'est rarement utile.
    Pas de Wi-Fi à la maison : CPL

  11. #31
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Optimiser pourquoi faire ?

    L'expérience montre que pour gagner en efficacité, il faut :
    • Ecrire le code normalement sans astuces particulière, mais en veillant comme toujours à ce qu'il n'y ai ni bug (facile) ni comportement indéfini (difficile...)
    • Passer le code au profiler pour voir quelles sont la ou les fonctions les plus utilisées.
    • Faire des mesures sur ces fonctions (facile, suffit d'instrumenter le test unitaire...).
    • Voir si on peut améliorer l'algorithme (éviter les redondances, les parcours de listes et de tableaux imbriqués etc.)
    • Monter le niveau d'optimisation du compilateur
    • En dernier seluement, faire les micro optimisations. En fait, c'est rarement utile.
    Ok.

    Est ce que essayer d'économiser la déclaration de variable peut être un plus ? Est ce que par exemple, déclarer 2 char *, parcequ'on veut avoir deux noms de variable causant crée une réelle différence avec la déclaration d'un seul char * qu'on va utiliser pour 2 travaux différents ?

    ça doit sûrement être inquantifiable, non ?

    Par ailleurs, que penses tu de ce genre de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main(){
    int a,b,c;
     
    b=12;
    a = 1 +b;
    c=3;
    {
    int d;
    d=48;
    }
     
    }
    le code en lui même est sans intérêt, mais est ce que mettre des accolades au milieu d'une plus grosse portion de code pour pouvoir rendre une variable 'volatile' a un intérêt ? (ce que je veux dire, c'est qu'une fois l'accolade fermante autour du
    la variable d n'a plus d'existence.)
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  12. #32
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ggnore
    Est ce que essayer d'économiser la déclaration de variable peut être un plus ? Est ce que par exemple, déclarer 2 char *, parcequ'on veut avoir deux noms de variable causant crée une réelle différence avec la déclaration d'un seul char * qu'on va utiliser pour 2 travaux différents ?

    ça doit sûrement être inquantifiable, non ?
    La seule réponse sensée est "faire des mesures"...
    Par ailleurs, que penses tu de ce genre de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(){
    int a,b,c;
     
    b=12;
    a = 1 +b;
    c=3;
    {
    int d;
    d=48;
    }
    }
    le code en lui même est sans intérêt, mais est ce que mettre des accolades au milieu d'une plus grosse portion de code pour pouvoir rendre une variable 'volatile'[1] a un intérêt ? (ce que je veux dire, c'est qu'une fois l'accolade fermante autour du
    la variable d n'a plus d'existence.)
    Je fais ça tout le temps parce que ça résout beaucoup de problèmes de conception.

    http://emmanuel-delahaye.developpez....tes.htm#portee

    Quand à l'effet sur la mémoire, il est variable. Certain compilateurs savent réutiliser la mémoire automatique libérée, d'autres ne se posent même pas la question et allouent toutes les variables sur la pile sans réflechir (MRI de Mentor Graphics, par exemple)...

    --------------------------
    [1] Attention, le terme 'volatile' a un sens précis en C (c'est même un mot clé) et il n'a rien à voir avec l'utilisation que tu en fais...
    Pas de Wi-Fi à la maison : CPL

  13. #33
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Je pense qu'au niveau de l'optimisation, il est bon d'avoir certains réflexes. Je ne dis pas de programmer des portions de code en assembleur, mais de réfléchir à ses algorithmes dans les portions critiques du programme.

    Je suis d'accord avec Emmanuel, faire des mesures peut parfois nous apprendre beaucoup de choses.

    Juste un exemple: souvent dans mes premiers programmes, j'écrivais mes propres fonctions de concaténation ou de copie de chaîne de caractères.
    Et puis un jour j'ai fait des mesures. Et bien quelle surprise lorsque je me suis aperçu que les fonctions strcat, strcpy, etc... étaient bien plus optimisées que ce que je ne pouvais faire.

    Donc oui faire des tests, une fois que l'on a pris quelques habitudes, il devient moins nécessaire de s'inquiéter de l'optimisation.

    Je pense que le programmeur qui s'inquiète de savoir si le code qu'il écrit est du bon code, est un bon état d'esprit. Je dirais que se poser des questions sur l'optimisation est presque un réflexe pour les programmeurs débutants. Quand on débute on veut savoir si notre code est efficace et optimisé.

    Les programmeurs avancées se posent moins ce genre de question(sauf cas particulier, ex: jeux vidéos), parce qu'ils ont pris certaines habitudes et que leur code a pû être maintes fois éprouvé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [flex/bison] un bout de code svp
    Par hunter99 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 29/12/2007, 22h26
  2. [XML][XSL] déplacer bout de code XML
    Par majanissa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 14/09/2005, 17h17
  3. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51

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