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 :

Gestion de la mémoire entre plusieurs DLL


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut Gestion de la mémoire entre plusieurs DLL
    BonJouR

    Le projet que je code se présente sous la forme de deux bibliothèques dynamiques. Parfois, il arrive que j'ai à faire des allocations (avec new) dans l'une et les désallocations correspondantes (delete) dans l'autre.
    Ca ne pose aucun problème, seulement quand j'utilise un operateur delete surchargé, ça plante. Quand je l'enlève, tout fonctionne à nouveau. Je précise que mon opérateur delete ne fait rien de spécial, il appelle simplement free après avoir loggé la désallocation.

    Est-ce qu'il existe des contraintes par rapport au partage de la gestion de la mémoire entre différentes DLL ? Qu'est-ce qui ne va pas dans mon cas ?

    Je code sous Windows XP avec VC.NET 2003

    Merci d'avance

  2. #2
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut Re: Gestion de la mémoire entre plusieurs DLL
    Citation Envoyé par Loulou24
    BonJouR
    Est-ce qu'il existe des contraintes par rapport au partage de la gestion de la mémoire entre différentes DLL ? Qu'est-ce qui ne va pas dans mon cas ?
    oui, et tu trouveras les réponses dans le MSDN (je crois qu'il s'agit d'un probleme de 'DLL boundary'.

  3. #3
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    voila l'article en question:
    PRB: Potential Errors Passing CRT Objects Across DLL Boundaries
    PSS id: KB190799
    tu devrais le retouver dans MSDN

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Merci pour l'article, je n'avais rien trouvé sur la MSDN même en tapant "dll boundary"

    Alors du coup comment faire, suis-je obligé de ramener toutes mes destructions dans la bonne DLL ? Il n'y aurait pas de "technique" permettant de résoudre le problème sans pour autant changer mon design (parce que là ça va me faire faire pas mal de modifications ) ?

    Et je vais également être obligé d'utiliser la version dynamique de la bibiothèque standard, est-ce que ça ne va pas dégrader les performances ? (je code un moteur 3D, la performance fait donc partie de mes soucis principaux)

  5. #5
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    quels options de compilation utilises-tu pour tes DLLs ?
    en particulier dans:
    C/C++ -> Génération de code -> Bibliothèque runtime

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Justement là j'ai changé, j'ai mis "DLL (de débogage) multithread", pour lier dynamiquement avec la bibliothèque standard. Mais ça ne règle que le problème pour les trucs standards, pas pour mes classes persos, non ?

  7. #7
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par Loulou24
    Et je vais également être obligé d'utiliser la version dynamique de la bibiothèque standard, est-ce que ça ne va pas dégrader les performances ? (je code un moteur 3D, la performance fait donc partie de mes soucis principaux)
    je ne suis pas un gourou du C++, mais je ne pense pas (peut-être un accès mémoire supplémentaire -> quelques cycles, rien de notable).
    Citation Envoyé par Loulou24
    Justement là j'ai changé, j'ai mis "DLL (de débogage) multithread", pour lier dynamiquement avec la bibliothèque standard. Mais ça ne règle que le problème pour les trucs standards, pas pour mes classes persos, non ?
    je pensais que comme les fonctions d'allocation/libération provenait de ce fait de la même DLL, il n'y aurait plus de problême...

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Effectivement, je ne voyais pas les choses comme ça. Le fait de lier dynamiquement avec la bibliothèque standard résoud parfaitement le problème (en tout cas ça a l'air de fonctionner).

    Maintenant y a plus qu'à prier pour que ça ne dégrade pas les performances

    Merci !

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

Discussions similaires

  1. Problème d'accés mémoire entre un exe et sa dll
    Par chgras dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/10/2011, 13h20
  2. Gestion entre plusieurs fichier AS3
    Par elbart dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 15/05/2010, 23h00
  3. Réponses: 5
    Dernier message: 08/08/2008, 14h48
  4. gestion mémoire sur plusieurs malloc
    Par contremaitre dans le forum C
    Réponses: 39
    Dernier message: 27/03/2008, 13h51
  5. Partager une version entre plusieurs DLL
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2005, 10h25

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