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

MFC Discussion :

Architecture et fonctionnement de la mémoire


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut Architecture et fonctionnement de la mémoire
    Bonjour à tous,

    Imaginons qu'a chaque fois que je clique sur un bouton, un nouveau DIALOG s'ouvre. Dans le constructeur de se dialog j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // m_szString est un WCHAR* membre de la class du Dialog
    m_szString = new WCHAR[100];
    Et dans le destructeur de ce dialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete [] m_szString;
    Maintenant, j'aimerais savoir ce qui se passera si on fait affiche et ferme ce DIALOG plusieurs fois de suite. À priori il n'y aura pas de memory leak, cependant peut-il finir par y avoir de la fragmentation de mémoire au niveau du système ??? ((Biensur, d'autres opérations d'allocation et dé-allocation pourraient avoir lieu en même temps, et de tailles variables...)

    Autrement dit, est-ce que Windows défragmente sa mémoire en idle ? Ou bien un moment où un autre il est voué à fragmenté à un point de ralentir le système...

    Merci pour vos réponses

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    je ne pense pas qu'un tel mécanisme de défragmentation automatique existe...
    maintenant je suis un peu étonné que ton cas conduise a un ralentissement du système.
    tu devrais regarder les ressources utilisées par ton programme : objet gdi mémoire etc dans le gestionnaire de tache.

  3. #3
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    En fait je n'ai pas de ralentissement de mémoire, c'est plutôt une théorie.

    Si cette théorie est juste alors il est fort probable qu'après de multiples allocation et dé-alocation de taille différente (voir des grosse allocation parfos) il puisse se créer des troues dans la mémoire et de ce fait, de la fragmentation.

    Donc, après un certain temps, windows aura de plus en plus de difficulté à trouver de la mémoire libre pour allouer (bloc de mémoire conitnues), alors il puisera dans la mémoire virtuelle.

    C'est que je développe sous "Windows CE", la mémoire est très limité et je me pose quelques questions à ce sujet. Cette application doit tourner 24h/24h, et elle ne doit en aucun cas souffir de ralentissement.

    farscape : Pour m'assurer que je n'avais pas de memory Leak ou ressource leak, j'utilise le logiciel "Entrek Toolbox". Le BEST OF pour Windows CE. Bref, jusqu'ici, j'en ai aucun.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 505
    Par défaut
    L'allocation fine fait via malloc n'est pas du ressort du système d'exploitation.
    Windows n'alloue et ne libère que des pages mémoires de 4ko ou 4Mo.
    C'est à la charge de la libc utilisé de faire sa tambouille pour la gestion fine de la mémoire.
    Sur machine Intel utilisant une MMU (mémoire virtuelle), qu'un programme est beaucoup de page alloué ou pas, ça ne change rien. C'est les défauts de pages qui coutent chères.

  5. #5
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Par défaut
    Je ne suis pas sur de bien comprendre.

    En résumé, est-ce qu'à long terme cela causera des problème ?

    Prenons un autre exemple plus concret. Disons que dans une boucle sans fin, au début on alloue de la mémoire (taille variable à chaque fois) pour une chaine de texte et qu'à la fin on dé-alloue cette mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    srand ( time(NULL) );
    BOOL bFinProgramme = FALSE;
    while (!bFinProgramme)
    {
       WCHAR szText = new WCHAR[ rand() % 500) + 1 ];
       // Opération diverses...
       delete [] szText;
    
       // Autre allocation diverses
       ... new [?]
       delete [] ...
    }
    Supposons que ce programme tourne durant 2-3 mois sans arrêt, que se passera-t-il dans la mémoire ? Y aura-t-il de la fragmentation, utilisation de la mémoire vituel un moment donnée ? Est-ce que libc s'organisera pour bien ré-organiser l'espace perdu et profiter de toute la mémoire ?

    Au fait, qu'entend-on par LIBC ?

    Merci pour votre aide, c'est apprécié.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    En théorie (si on reste dans le théorique), une défragmentation automatique a lieu quand on libère la mémoire. C'est une chose importante à faire dans un gestionnaire mémoire pour éviter justement le problème d'une trop grande fragmentation...
    Est-ce que CE le fait? Ben, fait un test d'endurance. Tu l'as déjà écrit!

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/12/2014, 08h45
  2. Architecture et fonctionnement d'apache avec oracle
    Par fanah dans le forum Administration
    Réponses: 0
    Dernier message: 26/01/2011, 10h01
  3. Fonctionnement de la mémoire sous XP
    Par gg dans le forum C++
    Réponses: 0
    Dernier message: 29/04/2008, 11h21
  4. Architecture & Fonctionnement d'un GPU
    Par Edouard Kaiser dans le forum OpenGL
    Réponses: 1
    Dernier message: 13/12/2005, 10h23

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