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 :

[Bonne pratique]Stratégie d'allocation


Sujet :

C

  1. #1
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut [Bonne pratique]Stratégie d'allocation
    Bonjour,

    Je dois maintenir des librairies écrites une en C et les autres en C++ sous un environnement solaris 7 (j'utilise WorkShop Compilers 5.0 98/12/15 C 5.0).
    Les librairies en C++ sont des CFX (custom tag de Coldfusion) qui appellent des fonctions de la librairie C. Cette dernière est un interface (un peu de code métier) à une base de données Oracle.

    Voici mon problème, on a découvert que la pluparts des appels des CFX se font dans des threads dont la taille de la pile est limitée (je ne connais pas la taille exacte de la pile). Ces CFX et la librairie C allouent des structures de données (d'une taille de quelques octes à plus de 50Koctets) dans la mémoire automatique, des tableaux de char (string de 64 à 4001 caractères).

    Cette allocation génère une instabilité dans notre application (l'application crashe) car une grande partie de la mémoire automatique est consommée par ces structures. Ma tâche est donc de corriger ce comportement en allouant les structures non pas dans la mémoire automatique mais dans la mémoire allouée.

    Voici mes questions concernant la bonne pratique en C.
    1) Quels sont les critères pour décident si l'allocation a lieu dans la mémoire automatique ou dans la mémoire allouée?

    2) J'ai pris la décision que toutes les structures indépendamment de leur tailles seront en mémoire allouée. Est-ce une bonne pratique?

    3) Mais j'ai un doute concernant les tableaux de caractères de petite taille (<= à 256octets), dois-je réserver leurs places en mémoire alouée?

    4) L'allocation de la mémoire (fonction malloc) a-t-elle une impacte négative sur la performance d'un programme écrit en C?

    5) Est-il envisageable si l'allocation a une grande influence (temps) de gérer la mémoire à l'aide d'un pool?
    Mon idée serait que les structures ne seraient pas libérées mais elles seraient placées dans ce pool en attendant que le programme réclame une structure du même type (donc de même taille).


    Merci d'avance pour vos réponses, remarques ou conseils
    Bien le bonjour chez vous
    Jowo

  2. #2
    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 Re: [Bonne pratique]Stratégie d'allocation
    Citation Envoyé par jowo
    Voici mon problème, on a découvert que la pluparts des appels des CFX se font dans des threads dont la taille de la pile est limitée (je ne connais pas la taille exacte de la pile). Ces CFX et la librairie C allouent des structures de données (d'une taille de quelques octes à plus de 50Koctets) dans la mémoire automatique, des tableaux de char (string de 64 à 4001 caractères).
    Pratique dangereuse. On ne devrait pas allouer autre chose que quelques variables locales en mémoire auto. Pour le reste : malloc()/free(). Pas le choix (pour être portable).
    Voici mes questions concernant la bonne pratique en C.
    1) Quels sont les critères pour décident si l'allocation a lieu dans la mémoire automatique ou dans la mémoire allouée?
    Voir ci-dessus.
    2) J'ai pris la décision que toutes les structures indépendamment de leur tailles seront en mémoire allouée. Est-ce une bonne pratique?
    Oui. (si elles depassent, disons, une cinquantaine de bytes...)
    3) Mais j'ai un doute concernant les tableaux de caractères de petite taille (<= à 256octets), dois-je réserver leurs places en mémoire alouée?
    Voir ci-dessus
    4) L'allocation de la mémoire (fonction malloc) a-t-elle une impacte négative sur la performance d'un programme écrit en C?
    Un peu, mais moins que des crashes à répétition!
    5) Est-il envisageable si l'allocation a une grande influence (temps) de gérer la mémoire à l'aide d'un pool?
    Bien sûr.
    Mon idée serait que les structures ne seraient pas libérées mais elles seraient placées dans ce pool en attendant que le programme réclame une structure du même type (donc de même taille).
    Absolulment. C'est une pratique courante en télécom, par exemple, ou la vitesse prime... (on parle de dizaines de milliers de trames par secondes). Pour des transactions de BdD, je ne sais pas si on a ces contraintes...

    Si besoin est, il faut faire des mesures et du profiling pour trouver où ça coince...
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 22
    Dernier message: 05/04/2013, 11h47
  2. Réponses: 0
    Dernier message: 07/11/2012, 13h43

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