Stratégies de gestion de la mémoire dans les programmes C++
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Stratégies de gestion de la mémoire dans les programmes C++



  1. #1
    vickyK

    Stratégies de gestion de la mémoire dans les programmes C++


    ------

    Chers passionnés de C++,

    Une gestion efficace de la mémoire est essentielle pour développer des programmes C++ robustes et efficaces, garantissant une utilisation optimale des ressources et minimisant les problèmes liés à la mémoire tels que les fuites de mémoire et la fragmentation de la mémoire. Cette question approfondit les différentes stratégies de gestion de la mémoire utilisées dans la programmation C++, explorant l'allocation dynamique de mémoire, les techniques de désallocation de mémoire et les meilleures pratiques d'optimisation de la mémoire.

    Aperçu du scénario*:

    La gestion de la mémoire est un aspect essentiel de la programmation C++, influençant les performances, la fiabilité et l'utilisation des ressources du programme. Cette question vise à explorer les diverses stratégies de gestion de la mémoire utilisées dans les programmes C++, en se concentrant sur l'allocation dynamique de mémoire, les techniques de désallocation de mémoire et les pratiques d'optimisation de la mémoire. En comprenant ces stratégies, les développeurs peuvent développer des applications C++ efficaces et fiables tout en atténuant les problèmes courants liés à la mémoire.

    voici l'extrait de code:

    Code:
    #include <iostream>
    
    int main() {
        // Example demonstrating dynamic memory allocation in C++
        int* ptr = new int; // Allocate memory dynamically for an integer
        *ptr = 10; // Assign value to dynamically allocated memory
    
        std::cout << "Dynamically allocated memory value: " << *ptr << std::endl;
    
        delete ptr; // Deallocate dynamically allocated memory
    
        return 0;
    }
    Points clés de discussion*:

    Allocation dynamique de mémoire*: discutez du concept d'allocation dynamique de mémoire en C++, en mettant l'accent sur l'utilisation des opérateurs new et delete pour allouer et libérer de la mémoire de manière dynamique au moment de l'exécution. Explorez les scénarios dans lesquels l'allocation dynamique de mémoire est nécessaire, par exemple lorsque la taille des structures de données est inconnue au moment de la compilation ou lorsque la mémoire doit être allouée sur le tas.

    Techniques de désallocation de mémoire*: explorez diverses techniques de désallocation de mémoire en C++, y compris la désallocation manuelle de la mémoire à l'aide de l'opérateur de suppression et la gestion automatique de la mémoire à l'aide de pointeurs intelligents tels que std::unique_ptr et std::shared_ptr. Discutez des avantages et des limites de chaque technique et donnez un aperçu des meilleures pratiques pour une désallocation de mémoire efficace.

    Pratiques d'optimisation de la mémoire*: cette section traite de l'optimisation de la mémoire dans la programmation C++, en mettant l'accent sur les approches permettant de minimiser la surcharge de mémoire, de diminuer la fragmentation de la mémoire et d'optimiser les modèles d'accès à la mémoire. Discutez de la manière d'optimiser la consommation de mémoire dans les structures de données, les algorithmes et la gestion des ressources pour augmenter les performances et l'efficacité des programmes.

    Détection et prévention des fuites de mémoire*: découvrez comment découvrir et prévenir les fuites de mémoire dans les applications C++ à l'aide d'outils d'analyse de mémoire statique et dynamique, ainsi que d'approches de profilage de mémoire. Discutez des sources typiques de fuites et de corruption de mémoire, ainsi que de la manière d'identifier et de résoudre les problèmes liés à la mémoire dans les bases de code C++, telles que celle affichée ci-dessous.

    merci
    j'espère que quelqu'un va aider

    -----

  2. #2
    pm42

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Tu veux qu'on fasse ton exposé à ta place en fait ?

  3. #3
    jiherve

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    bonjour,
    et les caches dans tout çà ?
    sont ils transparents ?
    JR
    l'électronique c'est pas du vaudou!

  4. #4
    Paraboloide_Hyperbolique

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Bonjour,

    Citation Envoyé par jiherve Voir le message
    et les caches dans tout çà ?
    sont ils transparents ?
    JR
    Je suppose que c'est implicitement mentionné dans la rubrique "Pratiques d'optimisation de la mémoire" où il est question de "diminuer la fragmentation de la mémoire et d'optimiser les modèles d'accès à la mémoire" ?

    Quoiqu'il en soit, pm42 et jiherve ont raisons: il faut montrer un minimum de travail. En particulier ici où je trouve que l'énoncé est suffisamment précis et complet pour pouvoir démarrer une recherche par soi-même.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Je suppose que c'est implicitement mentionné dans la rubrique "Pratiques d'optimisation de la mémoire" où il est question de "diminuer la fragmentation de la mémoire et d'optimiser les modèles d'accès à la mémoire" ?
    Cela n'a pas grand chose à voir avec les caches. C'est simplement le grand classique des techniques de gestion de la heap (tas en français) par des mécanismes comme malloc en C/C++ (utilisé par new en C++).
    Quand on alloue de la mémoire de cette façon puis qu'on la libère, on doit gérer où sont les espaces libres et pouvoir les réallouer.
    C'est assez proche de la gestion des fichiers sur un disque sauf qu'un bloc de mémoire demandé doit être contigu lui.

    Il faut pouvoir le faire relativement rapidement, sans que cette gestion ne consomme elle-même trop de mémoire et sans terminer avec trop de fragmentation. Sinon, on se retrouve à consommer énormément de mémoire virtuelle ce qui peut poser divers problèmes : réservation d'espace dans le swap, atteinte des limites en terme d'adressage...

    Historiquement, malloc utilisait une technique où chaque taille d'allocation était arrondie à la puissance de 2 supérieure et gérait des listes des différentes puissances pour ça. C'était compact, rapide mais consommateur en espace virtuel.
    Depuis, on a fait nettement plus sophistiqué.

    Pour en revenir aux caches quand il s'agit de gérer la mémoire, du point de vue du programmeur C/C++ comme de la plupart des langages il n'y en a aucun.
    Et c'est logique : il n'y avait tout simplement aucun cache mémoire sur de nombreuses machines historiquement ni même de mémoire virtuelle. Et pourtant on codait dessus en C/C++.
    Dernière modification par pm42 ; 29/02/2024 à 11h37.

  7. #6
    jiherve

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    re
    et l'espace virtuel était alors alloué sur un disque car quand il n'y a plus de mémoire physique silicium il n'y en a plus!
    quant aux caches je sais bien que les programmeurs en ignorent jusqu'à l'existence .
    JR
    l'électronique c'est pas du vaudou!

  8. #7
    pm42

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Citation Envoyé par jiherve Voir le message
    et l'espace virtuel était alors alloué sur un disque car quand il n'y a plus de mémoire physique silicium il n'y en a plus!
    Cela n'a rien à voir avec le sujet mais c'était dans mon message. Pas besoin de nous faire un court ni de dire "était" parce que ça n'a pas changé.

    Citation Envoyé par jiherve Voir le message
    quant aux caches je sais bien que les programmeurs en ignorent jusqu'à l'existence .
    Là aussi, rien à voir avec le sujet et ce n'est pas ce que j'ai dit.
    Tu as parlé des caches parce que tu n'as pas compris la question, c'est tout.

  9. #8
    albanxiii
    Modérateur

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Il est vrai que la question concerne les aspects logiciels, pas matériels. Ce sont deux choses bien différentes. En tout cas, au niveau de l'OP.
    Parce que si on mélange hard et soft, ça donne des trucs marrants comme spectre ou meltdown. Mais qui se soucis de l'exécution spéculative en écrivant son code ? (à part les gens qui écrivent des compilateurs)
    Not only is it not right, it's not even wrong!

  10. #9
    MissJenny

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Citation Envoyé par jiherve Voir le message
    quant aux caches je sais bien que les programmeurs en ignorent jusqu'à l'existence .
    ça dépend du programmeur. Tout ce qui se passe dans un ordinateur a été programmé un jour ou l'autre.

  11. #10
    Jack
    Modérateur

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Je ne sais pas si ça intéresse vraiment vickyK vu qu'il n'a pas remis les pieds ici depuis une semaine, mais depuis plus de 10 ans, il est déconseillé d'utiliser les pointeur "nus" et de préférer les "smart pointers". Tant qu'à faire un exposé, autant parler des bonnes pratiques.

    Sinon, pour moi, le vrai m..dier avec la gestion dynamique de la mémoire, c'est le multithreading. Il y a intérêt à être rigoureux et surtout très méthodique. Je n'ai pas énormément pratiqué, mais le peu que j'ai eu à utiliser m'a bien fait transpirer.

  12. #11
    pm42

    Re : Stratégies de gestion de la mémoire dans les programmes C++

    Citation Envoyé par Jack Voir le message
    Je ne sais pas si ça intéresse vraiment vickyK vu qu'il n'a pas remis les pieds ici depuis une semaine, mais depuis plus de 10 ans, il est déconseillé d'utiliser les pointeur "nus" et de préférer les "smart pointers". Tant qu'à faire un exposé, autant parler des bonnes pratiques.
    Effectivement, il n'est pas revenu et cela aurait été intéressant ne serait ce que pour préciser ce qu'il voulait. D'autant qu'on peut traiter le sujet sous différents axes.

    Citation Envoyé par Jack Voir le message
    Sinon, pour moi, le vrai m..dier avec la gestion dynamique de la mémoire, c'est le multithreading
    Quand c'est fait "à la main", c'est effectivement casse-gueule.
    C'est pour cela qu'on a développé des approches plus efficaces : modèles genre map/reduce ou acteurs, données immuables et programmation fonctionnelle qui se multithreade sans aucune difficulté ni risques, modèles de concurrence dès la conception du langage pour les candidats au remplacement de C/C++ comme Go et Rust et on pourrait continuer encore un certain temps.

Discussions similaires

  1. gestion memoire PIC18F26K20
    Par Eki27 dans le forum Électronique
    Réponses: 11
    Dernier message: 21/03/2012, 08h35
  2. Question sur la gestion de la memoire
    Par invited170028e dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 06/11/2010, 08h30
  3. Gestion mémoire I2C
    Par Olfox dans le forum Électronique
    Réponses: 1
    Dernier message: 24/02/2009, 12h58
  4. gestion de la memoire
    Par ABN84 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 19/01/2007, 08h03
  5. sous-programmes 68HC11F1 et mémoire externe
    Par invited6b3423a dans le forum Électronique
    Réponses: 3
    Dernier message: 26/12/2006, 15h41