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 :

Edition de liens C


Sujet :

C

  1. #21
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Oui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Membre éclairé Avatar de astrotouf
    Profil pro
    Consultant informatique
    Inscrit en
    Avril 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2005
    Messages : 221
    Par défaut
    Ok et bien merci !!! c'était trés concis

  3. #23
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Non, on voit que le code est partage. C'est tout l'interet d'avoir des fonctions.
    Pas pour vous blesser mais c'est complétement inintéressant de montrer du code assembleur pour 'expliquer clairement' ce qui se passe.

    Ne connaissant que trés peu l'assembleur, les demandeurs et intervenants à majorité également je pense, que voulez-vous qu'on en fasse ?

    Médinoc inline n'est pas dans le vocabulaire du langage C il me semble tu confonds avec les macros.

  4. #24
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par hegros Voir le message
    Pas pour vous blesser mais c'est complétement inintéressant de montrer du code assembleur pour 'expliquer clairement' ce qui se passe.
    J'ai du mal à voir ce que montrer clairement ce qui se passe peut signifier d'autre que regarder le code machine final.

    Médinoc inline n'est pas dans le vocabulaire du langage C il me semble tu confonds avec les macros.
    inline est un mot clé en C depuis 1999.

  5. #25
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'ai du mal à voir ce que montrer clairement ce qui se passe peut signifier d'autre que regarder le code machine final.
    En le commentant ca peut être intéressant mais brut ca fais plus peur qu'autre chose je trouve.

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    inline est un mot clé en C depuis 1999.
    Ah d'accord, je ne suis pas obstineux.

  6. #26
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Citation Envoyé par hegros Voir le message
    Ne connaissant que trés peu l'assembleur, les demandeurs et intervenants à majorité également je pense, que voulez-vous qu'on en fasse ?
    Voir qu'il n'y a rien dedans qui ressemble à une copie du code d'une grande fonction comme printf(), et voir les quatre "call _printf" dans le code : Quatre sauts vers le code de la fonction
    Médinoc inline n'est pas dans le vocabulaire du langage C il me semble tu confonds avec les macros.
    Je connais la différence entre fonctions inline et macros, mais je me suis demandé si tu ne confondais pas toi-même en disant que le code des fonctions était recopié à chaque appel.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Membre éclairé Avatar de astrotouf
    Profil pro
    Consultant informatique
    Inscrit en
    Avril 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2005
    Messages : 221
    Par défaut
    je suis content ! c'est le premier sujet que je poste et qui gagne autant de succès.
    c'est vrai que seules les fonctions inline sont remplacées par leur code à chaque appel.
    voila un lien qui l'explique de manière explicite :
    http://membres.lycos.fr/dancel/cplus...s/fonct40.html

    Mais je croyais que le mot clé inline était défini qu'à partir de C++ ??
    je me trompe ??

  8. #28
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Voir qu'il n'y a rien dedans qui ressemble à une copie du code d'une grande fonction comme printf(), et voir les quatre "call _printf" dans le code : Quatre sauts vers le code de la fonction
    Je pense que si tu crois que c'est clair pour tout le monde alors tu te trompes.

    Sans vantardise, cela fait plus de 8ans maintenant... on va dire que je fais de la programmation et ce n'est pas clair du tout.

    inline et macro sont quasi-identiques pour moi et remplissent en tout cas la même fonction.

  9. #29
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Vous avez raison c'est bien cela j'ai fais une confusion.

    Mais vraiment les commentaires manquent je trouve, en tout cas cela ne m'a pas éclairé, en tout cas de suite.


  10. #30
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par astrotouf Voir le message

    Mais je croyais que le mot clé inline était défini qu'à partir de C++ ??
    je me trompe ??
    Citation Envoyé par Jean-Marc.Bourguet
    inline est un mot clé en C depuis 1999.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros Voir le message
    Je ne suppose rien du tout. C'est ce qui est fait lorsque la liaison est statique
    Euh, non. Seul l'appel est répété. La fonction n'est présente qu'une seule fois dans la bibliothèque statique qui est liée à l'application (sauf si le compilateur décide d'inliner les fonctions courtes comme strcpy(), memcpy() etc.)

  12. #32
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Euh, non. Seul l'appel est répété. La fonction n'est présente qu'une seule fois dans la bibliothèque statique qui est liée à l'application (sauf si le compilateur décide d'inliner les fonctions courtes comme strcpy(), memcpy() etc.)
    Oui j'ai répondu déja à cela.

    Sinon je n'ai jamais dis que la fonction était présente plusieurs fois dans la bibliothéque.

    Et effectivement c'est plus en rapport avec le inline ce que j'ai rapporté.

    Sinon pour les fonctions récursives il y avait quelque chose de particulier ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par astrotouf Voir le message
    ça c'est une trés bonne réponse !!
    bon alors je vais en revenir à ce dont j'ai besoin réellement. lorsqu'on utilise une bibliothèque comme GTK+, je pense que dans ce cas on l'utilise de manière dynamique puisqu'il faut un runtime pour faire marcher les programmes GTK+ ?
    est-ce-que les librairies utilisées par la bibliothéque sont totalement chargées en mémoire (libg, pango ...etc) ou est ce qu'elle ne charge que les choses les plus nécessaires (les fonctions appelées dans notre code source?
    voyez-vous c'est juste pour voir l'impacte sur la mémoire.
    Ce n'est pas une question de langage C. C'est un problème de système, d'exécutable, de bibliothèques partagées ou non... Il n'y a pas de réponse 'C'. Tout ce qu'on peut dire d'ici est 'ça dépend de l'implémentation'... Certains systèmes gèrent mieux la mémoire que d'autres. Ce n'est pas le lieu pour en débattre.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros Voir le message
    En le commentant ca peut être intéressant mais brut ca fais plus peur qu'autre chose je trouve.
    Bah, il est déjà commenté. Voici la partie intéressante qui montre clairement qu'il y a 4 appels à printf() :
    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
     
    ; 5    : 	printf("Bonjour\n");
     
    	push	OFFSET ??_C@_08HIKGINMF@Bonjour?6?$AA@
    	call	_printf
    	add	esp, 4
     
    ; 6    : 	printf("Hello\n");
     
    	push	OFFSET ??_C@_06NJBIDDBG@Hello?6?$AA@
    	call	_printf
    	add	esp, 4
     
    ; 7    : 	printf("Bonjourno\n");
     
    	push	OFFSET ??_C@_0L@CIKEKAPD@Bonjourno?6?$AA@
    	call	_printf
    	add	esp, 4
     
    ; 8    : 	printf("Kornichoah\n");
     
    	push	OFFSET ??_C@_0M@NFGECFDE@Kornichoah?6?$AA@
    	call	_printf
    	add	esp, 4

  15. #35
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Et le code de printf c'est ce qu'il y a tout à la fin ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros Voir le message
    Et le code de printf c'est ce qu'il y a tout à la fin ?
    Non. Le code de printf est dans la bibliothèque. Ce que montre l'assembleur, c'est le résultat de la traduction du (supposé) main.c de C en assembleur. Pour voir le printf() , il faudrait désassembler le .exe... Bon courage, parce que dans ce sens là, il n'y a évidemment aucun identificateur. Que des adresses (relatives) 'en dur'...

    Ce qu'il y a à la fin, d'après le nom de la fonction c'est un appel à une fonction 'système C' (RTC = Run Time C-library) qui vérifie si la pile a explosé ou non (Check SP, avec SP = Stack Pointer)...

  17. #37
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    C'est pas clair pour moi ne connaissant pas l'assembleur, c'est pour cela que je disais que l'exemple n'est pas forcément le meilleur.

    La bibliothéque est dynamique alors??????

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros Voir le message
    C'est pas clair pour moi ne connaissant pas l'assembleur, c'est pour cela que je disais que l'exemple n'est pas forcément le meilleur.

    La bibliothéque est dynamique alors??????
    Bah non. Elle est statique, mais elle n'est pas dans main.c... 'Compilation séparée', ça te parle ?

  19. #39
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    On ne doit pas parler de la même chose alors.

    Dans l'executable final, on ne retrouve bien qu'une fois le code binaire de printf bien qu'on l'appelle x fois dans le programme ?

    Du coup la liaison statique perd, de mon point de vue, tout son sens...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hegros Voir le message
    On ne doit pas parler de la même chose alors.

    Dans l'executable final, on ne retrouve bien qu'une fois le code binaire de printf bien qu'on l'appelle x fois dans le programme ?
    Oui, tout à fait., comme déjà indiqué :
    Citation Envoyé par -ed-
    Pour voir le printf() , il faudrait désassembler le .exe
    Du coup la liaison statique perd, de mon point de vue, tout son sens...
    Bah, je ne vois pas pourquoi. Elle fait exactement ce pourquoi elle a été faite.

Discussions similaires

  1. Edition des liens croisée
    Par Matthieu Brucher dans le forum Windows
    Réponses: 3
    Dernier message: 22/03/2006, 00h08
  2. Réponses: 11
    Dernier message: 20/01/2006, 12h35
  3. Edition de liens dynamique sous linux
    Par Ipoupaille dans le forum Linux
    Réponses: 4
    Dernier message: 09/01/2006, 21h53
  4. Edition de liens et librairie dynamique
    Par nicolas.pied dans le forum C++
    Réponses: 9
    Dernier message: 14/11/2005, 14h29
  5. Rôle de l'édition de lien?
    Par sali dans le forum C
    Réponses: 6
    Dernier message: 14/05/2005, 21h17

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