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 :

Optimisation de la mémoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut Optimisation de la mémoire
    bonsoir à tous,

    J'ai une petite question qui me tracasse ...
    Quelle méthode vous parait la plus optimisée pour la gestion de la mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char chaine[50];
     
    strncpy(chaine, "un simple exemple", 50);
    /* on laisse la mémoire être vidée à la terminaison du programme */
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *chaine;
     
    chaine = strdup("un simple exemple");
    free(chaine);
    Ma question vous parait peut être idiote mais dans le cas du 1er exemple on alloue un espace mémoire de 50 caractères, ceci même si le mot qu'on y copie n'en fait pas autant, puis dans l'exemple 2, seul l'espace mémoire dont j'ai besoin va être alloué grâce a strdup.
    Donc pour vous, quelle méthode est la plus propre, la plus optimisée en terme de gestion de la mémoire.

    Merci à vous pour vos futurs explications

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Ca dépend de l'usage que tu comptes faire de cette chaine. Si c'est une constante, il faut la déclarer en tant que telle. Si c'est le résultat d'une saisie, il faut réserver l'espace pour la plus grande saisie autorisée. Si elle fait partie d'un dictionnaire lu d'un fichier, strdup me parait bien.

    A+

    Pfeuh

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Options non-indiquées dans le premier message:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /*Constante pure*/
    char const * chaine = "un simple exemple";
     
    /*Buffer avec pile la bonne taille*/
    char chaine[] = "un simple exemple";
    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.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Options dans un cadre un peu différent puisqu'il s'agit alors d'initialisations et non d'affectations.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ah, en effet.

    D'un autre côté, la première peut être une affectation (mais pas la seconde).
    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.

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Par défaut
    merci pour vos réponses

    Dans le cas du 1er exemple, l'espace pré-alloué est limité a 50 caractères, si je n'en copie que 10 avec un strncpy(), l'espace restant il fini ou ? il est vidé automatiquement ? si oui, du coup il n'y a pas vraiment d'avantage a utiliser strdup() , a part s'il y a une taille maxi imposée ? J'me suis dit que je pourrai combiner les 2 en écrivant une fonction strdup qui prendrai également comme argument une taille maximum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    char
    *string_copy(char *dest, const char *src, size_t size)
    {
    	const char *end = dest + size;
    	char *copy = dest;
     
    	while (*src && dest < end)
    		*dest++ = *src++;
     
    	*dest = 0;
    	return copy;
    }
     
     
    char
    *string_dup(const char *src, size_t maxsize)
    {
    	char *ret = NULL;
    	size_t size = strlen(src);
     
    	if (size > maxsize) size = maxsize;
     
    	ret = malloc(size + 1);
     
    	if (ret) string_copy(ret, src, size);
    	else abort();
     
    	return ret;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine = string_dup("un simple exemple", 50);
    au final es-ce que ca en vaut la peine d'après vous ? J'essai simplement de gérer la mémoire au mieux, si vous me dites qu'il n'y a pas réellement d'intêret et que les 2 méthodes citées en début de poste sont plus ou moins equivalentes je lacherai l'affaire ...

    Merci à vous

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

Discussions similaires

  1. [WD16] Optimisation affichage table mémoire
    Par Pascal26120 dans le forum WinDev
    Réponses: 4
    Dernier message: 02/11/2011, 20h37
  2. Optimisation de la mémoire
    Par souminet dans le forum Débuter
    Réponses: 16
    Dernier message: 21/10/2008, 09h24
  3. Optimisation de la mémoire pour Oracle
    Par farenheiit dans le forum Administration
    Réponses: 25
    Dernier message: 14/01/2008, 13h47
  4. Optimisation de la mémoire
    Par alexadvance dans le forum Visual C++
    Réponses: 2
    Dernier message: 15/03/2007, 12h05
  5. C# optimisation de la mémoire
    Par guigui6238 dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 20/02/2007, 09h18

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