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 :

[DLL] utilisation multiple


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut [DLL] utilisation multiple
    Bonjour,
    Une question m'est posée et je ne sais pas y répondre de manière certaine :

    Si 2 executables différents font appelle à la meme DLL en même temps. Est ce que la mémoire concernant la DLL est partagée ou non ? Sinon, le deuxième exe va faire une deuxieme instance de la DLL en memoire ...

    J'espere que je suis clair, et si non, dites le moi.
    Merci d'avance pour vos réponses.

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    ce que contient la dll sera partagée, en revance l'instance de ce que contient la dll non, je ne sais pas si je suis clair
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Le code sera partagé

    Par contre les variables de la DLL seront instanciées séparément dans chacuns des espaces mémoires du process appelant.

    Il n'y a pas partage des variables d'une DLL entre 2 process qui utilisent la même DLL.
    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
    .

  4. #4
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Merci pour vos réponses.
    Donc pas de souci à se faire sur ce point là.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    J'ai une petite précision à apporter.
    Les choses qui sont partagés ou pas dans une dll est fonction des propriétés du segment qui les contient.
    Je m'explique, une dll, comme un exécutable, est constitué, en mémoire, par un ensemble de zone mémoire. Chaque zone mémoire est un segment. Le fichier de la dll ou de l'exécutable définit les segments du binaire ainsi que les propriétés de chacun d'eux. Dans les propriétés de chaque segment il y a une propriété SHARED qui indique si le segment doit être partagé ou pas par les programmes.
    Par défaut, VC++ génère un seule segment pour le code et ayant la propriété SHARED à "true". Il génère un segment pour les variables initialisées et un segment avec les variables non initialisées, ces deux segment on la propriété SHARED à "false".
    Donc, par défaut, cela correspond à la description que ram-0000 décrit. Mais rien n'empêche de configurer le linker de VC pour avoir un comportement différent et rien n'empêche le développeur de créer des segments supplémentaires à coup de #pragma avec la propriété SHARED qui lui plaid.
    C'est juste une précision mais il est bon de savoir que le schéma est un peu moins restreint.

  6. #6
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Tu as raison bacelar, il est toujours interessant de savoir ce qu'il se passe exactement dans les bas fonds de la machine. Pour ma part, ca me permet souvent de comprendre, mais aussi de retenir ces choses.
    Merci pour cette info. Juste pour parfaire ma culture sur le sujet, ou est ce que ca se passe pour gerer ces options avec code blocks + gcc ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Désolé, mais gcc, ça fait longtemps que je n'y ai pas touché.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    À ce propos, les sections .shared des DLLs sont une faille de sécurité pouvant mener à une élévation de privilège:
    Why .shared sections are a security hole
    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.

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

Discussions similaires

  1. Utilisation multiple d'une fonction de DLL
    Par jimmy42 dans le forum C
    Réponses: 2
    Dernier message: 19/03/2008, 16h47
  2. [jdbc] nb de connections / pb d'utilisations multiples
    Par pierre.zelb dans le forum JDBC
    Réponses: 8
    Dernier message: 04/08/2005, 16h13
  3. dll utilisable avec VBAccess 97
    Par Mü dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 10/02/2005, 15h45
  4. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01
  5. [DLL] Utilisation d'une DLL pour utiliser serveur Firebird
    Par sekiryou dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2004, 14h20

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