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 :

Programme d'étude sur le C++ bas niveau


Sujet :

C++

  1. #1
    Rédacteur/Modérateur

    Bonjour,

    L'objectif de cette série d'article d'Alex Darby sur la programmation "bas-niveau" est de permettre aux développeurs ayant déjà des connaissances de la programmation C++ de mieux comprendre comme vos programmes sont exécutés en pratique.

    Ce premier article explique l'importance de connaître le fonctionnement bas-niveau et comment récupérer le code assembleur généré par le compilateur et l'interpréter.

    Programme d'étude sur le C++ bas niveau

    Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ?
    Avez-vous déjà analysé le code assembleur et pour quel objectif ?


    Bonne lecture.

    Retrouvez l'ensemble des articles de cette série sur la page d'index.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  2. #2
    Membre éprouvé
    Article intéressant, cette série est prometteuse !

    Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ?

    oui, au moins pour comprendre la transition entre ce qu'un développeur code et ce qu'il voit une fois compilé et exécuté, comprendre que tout n'apparait pas par "magie"


    Avez-vous déjà analysé le code assembleur et pour quel objectif ?

    quelques fois pour débugger mais plus souvent pour comprendre comment telles ou telles choses se passent au niveau des registres par exemple
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  3. #3
    Membre averti
    Oui, ça s'est un article qu'il est bien :p

    Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ? Je penses que c'est un très gros avantage (pour ne par dire un must :p), après ça vient peut-être de ma spécialisation en embarqué


    Avez-vous déjà analysé le code assembleur et pour quel objectif ?
    j'ai très tôt appris à mettre le nez dans ce que le compilo génère, surtout pour voir comment avoir un meilleur rendu en assembleur, et en général, ça donne aussi un meilleur code C. :p

    Après je suis un peu moins familier avec les spécificités du C++, j'attend la suite avec impatience.

  4. #4
    Expert éminent
    Citation Envoyé par gbdivers Voir le message

    Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ?
    C'est souvent amusant, ca sert parfois, mais travailler a trop bas niveau fait partie de ces peches commis au nom de l'efficacite.

    "More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason — including blind stupidity." — W.A. Wulf

    Avez-vous déjà analysé le code assembleur et pour quel objectif ?
    Je dois avoir ecrit quelques dizaines de milliers de lignes d'assembleur (au moins pour 3 archi bien differentes, 8051, 68000, x86), mais ca fait des annees que je n'ai plus fait ca. Plus recemment, j'ai aussi confirme des bugs de compilateurs en regardant l'assembleur genere.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre émérite
    Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ?

    Très utilie, pour n'importe quel développeur, y compris de BDD: comprendre sa machine permet d'éviter, par exemple, d'utiliser des chaînes de caractères en guise d'identifiant unique. Ou au moins de savoir que et pourquoi ça plombe les perfs.

    Avez-vous déjà analysé le code assembleur et pour quel objectif ?
    Oui, pour comprendre un bug d'un code qui apparaissait avec VS et pas GCC.
    Ce bug était dû à l'un des nombreux flous du standard:
    le fait que le calcul des expressions passées en argument à une fonction n'est pas imposé.
    J'avais besoin de ça pour automatiser un wrapper: flemme de déclarer à chaque fonction une quantité invraisemblable d'arguments qui étaient toujours à peu près les mêmes, alors j'ai utilisé des tableaux. Mais l'index se décalait mal sous VS...(Le contournement étant naturellement d'utiliser une fonction inline)

    Et j'ai dû recourir à des index parce que bien sûr, on ne peut pas gérer un appel de fonction de façon arbitraire (ou je ne sais pas faire) comme on le ferait en asm à coup de "push ... push ... call ..."

    Sur ce coup, j'étais content de connaître des notions d'ASM.

  6. #6
    Inactif  
    -> Que pensez-vous de l'importance de connaître le bas-niveau pour un développeur C++ et/ou les autres ?

    J'irais même plus loin, je pense qu'il ne faut pas seulement connaître l'assembleur mais aussi connaître le fonctionnement d'un ordinateur.

    Par exemple pour le parcours d'un tableau tab[i][j][k], ce n'est pas forcément évident que selon comment on parcours celui-ci (en incrémentant les i en premier puis les j ou en commençant par les k puis les j, ...) on a pas du tout les mêmes performances.

    L'assembleur est très utile par exemple pour comprendre pourquoi l'appel de fonction est relativement lourd.

    La simple connaissance du fonctionnement permet de comprendre les coûts de ce qu'on fait et ainsi de coder plus intelligemment.

    Les gains de performances ne sont pas toujours très importante mais si ça ne coûte rien au programmeur, autant avoir les bons réflexes.


    Quand on apprend l'assembleur, c'est l'occasion de voir comment fonctionne les chaînes de compilations, de voir comment le code est exécuté, comment la mémoire est gérée, ...

  7. #7
    Modérateur

    J'ai lu avec intérêt et j'attends surtout la suite

    Bravo à Bousk et à son équipe pour la traduction !

  8. #8
    Membre éclairé
    Très bon cours.

    Il est vrai que l'assembleur fait peur, mais c'est très intéressant.

    Pour m'amuser j'ai fait la même chose en delphi et devinez... le code généré est très similaire voyez plutôt :



    A pars l'optimisation du Z := 0 tout est identique.

    On voit au passage la restauration du pointeur de pile tout à la fin.

    Pour info le livre Systèmes d'exploitation: Collection Synthex dans son premier chapitre aborde ces notions ainsi que la pile.

  9. #9
    Membre habitué
    Il serait bien d'ajouter "n° 1 : ..." dans le titre pour bien suivre avec les autres qui sont tous numéroté.

  10. #10
    Membre expert
    Salut et grand merci de l'effort
    Est-il possible d'avoir une version imprimable de l'ensemble de l'article?
    Merci d'avance.
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  11. #11
    Rédacteur/Modérateur

    Tu as accès à une version PDF dans l'en-tête de l'article.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Expert éminent sénior
    merci ça m'aide beaucoup !

    je suis en train de programmer un compilateur et ça me donne des idées
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    ( A Einstein)

  13. #13
    Membre confirmé
    Bonjour,

    Je ne sais pas si vous êtes au courant mais de nouvelles parties ont été postées par l'auteur.
    Part 10
    Part 11
    Part 12

    Aller vous les traduire ?

  14. #14
    Rédacteur

    Citation Envoyé par Kalite Voir le message
    Aller vous les traduire ?
    Il va falloir trouver du temps CPU mais ce serait une bonne idée de compléter la série.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  15. #15
    Membre confirmé
    Citation Envoyé par ram-0000 Voir le message
    Il va falloir trouver du temps CPU mais ce serait une bonne idée de compléter la série.
    Je vais essayer de trouver du temps pour le faire. Y a t'il des règles particulière à respecter ?

  16. #16
    Rédacteur

    Citation Envoyé par Kalite Voir le message
    Je vais essayer de trouver du temps pour le faire. Y a t'il des règles particulière à respecter ?
    Salut,

    Pas de règles particulières et même je te propose 2 options :

    Soit tu fais la traduction toi même et tu gabarises l'article en même temps.

    Soit tu fais la traduction toi même et je gabarise parce que tu n'as pas l'habitude ni les outils ou que tu ne veux pas te prendre la tête avec ces outils (dommage, c'est un bon moyen pour mettre un pied dans la rédaction d'articles).

    Dans tous les cas, tu peux ouvrir un thread de relecture technique dans C et C++ > C++ > Communauté > Contribuez pour chacun des nouveaux articles que tu traduis (envoie moi un MP pour me signaler l'ouverture du thread afin que je m'y abonne).

    Ensuite, c'est la gabarisation (par toi ou par moi) toujours dans le même thread et ensuite c'est la relecture orthographique (dans une autre partie du forum) puis la diffusion (mais là, c'est le boulot de germinolegrand).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  17. #17
    Nouveau membre du Club
    Bonjour,

    Auriez vous un desassembleur sous linux a me conseiller? Je n'arrive pas a en trouver un qui permette de voir a la fois le code C et le code assembleur, comme sur la capture d'ecran.

    Merci d'avance!

  18. #18
    Rédacteur/Modérateur

    Bonjour,

    la capture d'écran n'est pas un désassembleur mais un IDE.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Nouveau membre du Club
    Bonjour,

    oui j'ai bien compris, laissez moi reformuler alors : "un desassembleur avec une interface me permettant de voir egalement le code source" / "un ide avec un desassembleur integre me permettant egalement le code source"

  20. #20
    Rédacteur/Modérateur

    L'IDE peut te montrer le code assembleur de ce qu'il compile. C'est tout.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

###raw>template_hook.ano_emploi###