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 :

Allocation managée dans de l'unsafe code


Sujet :

C#

  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut Allocation managée dans de l'unsafe code
    Bonjour,

    hormis le fait de pouvoir utiliser des pointeurs, quelles sont les conséquences de l'utilisation du mot clef unsafe dans ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public unsafe void Draw( double* data, uint size )
    {
        BeginInvoke( new InvokeDelegate( DrawData ), new Object[] { new Data() { m_data = data, m_size = size } } );
    }
    L'objet Data, notamment, sera-t-il ramassé par le GC ? Le fait d'avoir été alloué dans ce bloc unsafe ne pose pas de problème ?

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    Unsafe tout seul ne desactive pas le GC.

    C'est avec le mot clé fixed (dans un contexte unsafe) que l'on peut specifier que le GC ne doit pas gerer la reallocation/desallocation/ertc.. du poointer concerné.

  3. #3
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Quel est l'intérêt de désactiver le GC au juste?

  4. #4
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    Pour etre sur que ton adresse memoire (pointer) reste constante (eviter que le GC la deplace) afin de tomber juste lors de l'utilisation du pointer ( operateur "->").

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Pour etre sur que ton adresse memoire (pointer) reste constante (eviter que le GC la deplace) afin de tomber juste lors de l'utilisation du pointer ( operateur "->").
    Citation Envoyé par http://msdn.microsoft.com/en-us/library/aa664772(VS.71).aspx
    Fixed variables reside in storage locations that are unaffected by operation of the garbage collector. (Examples of fixed variables include local variables, value parameters, and variables created by dereferencing pointers.) On the other hand, moveable variables reside in storage locations that are subject to relocation or disposal by the garbage collector. (Examples of moveable variables include fields in objects and elements of arrays.)
    Dans mon cas, je n'ai pas de problème fixed/moveable car le pointeur data pointe vers des données fixed (forcément puisque retournées depuis une DLL C++ native).

    L'objet Data et son champ m_data sont eux, par contre, moveable, mais je n'utilise jamais leur adresse, j'ai juste besoin de déréférencer m_data pour retrouver mes données.

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

Discussions similaires

  1. Utilisation d'une lib de code managé dans dll
    Par Larxene dans le forum C++/CLI
    Réponses: 6
    Dernier message: 06/05/2013, 23h22
  2. Réponses: 1
    Dernier message: 12/06/2006, 16h40
  3. [Outils] Utiliser la molette dans l'éditeur de code
    Par Maxence HUBICHE dans le forum Contribuez
    Réponses: 2
    Dernier message: 31/05/2006, 09h35
  4. Savoir dans quelle ligne de code je me situe
    Par FrankOVD dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 22h35
  5. [PERL]Remplacer un caractère dans on a le code ASCII
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2005, 15h13

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