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 :

Où allouer la mémoire dans une bibliothéque


Sujet :

C

  1. #1
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut Où allouer la mémoire dans une bibliothéque
    Bonjour, après avoir développé quelques bibliothèques, je me pose des questions sur leur facilité d'utilisation, leur stabilité...
    Entre autre je me demande si l'allocation mémoire doit se faire dans les fonctions qui attendent un pointeur (verifier si NULL, et allouer, dans ce cas, risque d'effet de bord), ou si elle doivent attendre un pointeur sur un type pleinement initialisé (dans ce cas, risque de plantage).


    J ai chercher dans le GNU coding standards, mais je ne comprend pas la première phrase qui me semble utile...
    http://www.gnu.org/prep/standards/ht...html#Libraries

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Il est dit de faire des fonctions réentrantes, c'est à dire, que l'on puisse les invoquer sainement dans un gestionnaire de signal. malloc() est connue pour être une fonction non réentrante, donc elle est à proscrire dans tout gestionnaire de signal.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    Bonjour, après avoir développé quelques bibliothèques, je me pose des questions sur leur facilité d'utilisation, leur stabilité...
    Entre autre je me demande si l'allocation mémoire doit se faire dans les fonctions
    Oui
    qui attendent un pointeur (verifier si NULL, et allouer, dans ce cas, risque d'effet de bord), ou si elle doivent attendre un pointeur sur un type pleinement initialisé (dans ce cas, risque de plantage).
    Et c'est pas très clair...
    Le principe absolu de séparation du code et des données fait que le code de bibliothèque doit être contextuel, c'est à dire que les données viennent de l'application (même si l'application a appelé un 'constructeur qui a lui même fait l'allocation) via un pointeur sur la structure de données.

    Le modèle FILE de la bibliothèque standard du C est un bon exemple.
    J ai chercher dans le GNU coding standards, mais je ne comprend pas la première phrase qui me semble utile...
    http://www.gnu.org/prep/standards/ht...html#Libraries
    "Try to make library functions reentrant. If they need to do dynamic storage allocation, at least try to avoid any nonreentrancy aside from that of malloc itself. "

    "Essayer de rendre les fonctions de la bibliothèque réentrantes. Si elles ont besoin de faire de l'allocation dynamique de mémoire essayer au moins d'éviter toute réentrance, en dehors de celle (inévitable[NdT]) de malloc()."

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/05/2007, 10h41
  2. Réponses: 2
    Dernier message: 19/02/2007, 15h46
  3. Réponses: 7
    Dernier message: 15/12/2006, 18h31
  4. Réponses: 11
    Dernier message: 12/08/2006, 10h22
  5. Réponses: 4
    Dernier message: 01/06/2006, 15h55

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