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 :

Mémoire d'un programme


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut Mémoire d'un programme
    Hello,
    je souhaiterai savoir si il existe une fonction standard (ou non aprés tout...) qui permettrait de connaitre l'espace mémoire utilisé par un programme C au cours de son execution?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    En standard non, après tout dépend de ton système ... est même là je ne suis pas sûr
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Et quel est ton système d'exploitation ?

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Oui, il faut récupérer les adresses de fin des segments text (correspndant au code, c'est aux dira aux instructions), data et bss qui sont définis au moment de la compilation.

    Dans la cas, d'un système embarqué, tu es censé connaître l'adresse départ de ta mémoire où le sytème débutera (RAM_LOW_ADRS).

    Il ne te reste plus qu'à faire la différence des adresses pour obenir l'espace mémoire dédiée à chaque segment.

    Pour VXWorks, par exemple, il faut importer de cette manière les adresses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* imports */
    /* To obtain end of text, data and bss adress*/
    IMPORT char etext [];                   /* defined by loader */
    IMPORT char end [];                     /* defined by loader */
    IMPORT char edata [];                   /* defined by loader */
    Voilà, ca t'aidera peut être.

    Nicolas

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Je shouaite connaitre la mémoire utilisé par mon programme sous linux et windows. (et ce a tout moment du programme. ex: toutes les 5 min ca affiche la quantité de mémoire utilisée par le programme).

    homeostasie, je n'ai pas bien compris ta proposition.

  6. #6
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Tu parles de quelle mémoire en fait?

    Apparamment tu ne de désires pas connaître la taille de ton programme mais la mémoire utilsée au cours de l'éxécution (état de la pile et du tas), c'est cela?

    Nicolas

  7. #7
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par vinzzzz
    Je shouaite connaitre la mémoire utilisé par mon programme sous linux et windows
    Pour Windows, tu as l'API GetProcessMemoryInfo.

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Citation Envoyé par homeostasie
    Tu parles de quelle mémoire en fait?

    Apparamment tu ne de désires pas connaître la taille de ton programme mais la mémoire utilsée au cours de l'éxécution (état de la pile et du tas), c'est cela?

    Nicolas
    Mémoire vive mon programme est sucéptible de prendre beaucoup de mémoire au cours du temps.

    Je vais regarder l'API que propose Mayti4 pr windows. Si vous connaissez l'équivalent sous linux n'hésitez pas.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vinzzzz
    je souhaiterai savoir si il existe une fonction standard (ou non aprés tout...) qui permettrait de connaitre l'espace mémoire utilisé par un programme C au cours de son execution?
    Ce n'est pas une question C. Demande à ton éditeur de lien de sortir la cartographie mémoire (map ou mapping).

    Elle te renseignera sur l'encombrement statique (code et données). Par contre, l'utilisation de la mémoire dynamique n'est évidemment pas pris en compte.

    Détails sur Outils pour C & C++ / EDI / Compilateurs / etc

  10. #10
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Sous linux tu peux regarder dans le "fichier" /proc/self/statm
    La premiere valeur est le nombre de pages (de 4k generallement, mais je ne sais pas où trouver cette information) allouée par le programme qui lit le "fichier".

    Si tu veux plus d'info, fais man proc et la t'auras plein d'infos sur les différents "fichiers".

    Rq: le /proc/self est un "raccourci" sur /proc/PID où PID est le PID de ton process.

    Exemple:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
    #include <stdlib.h>
     
    void memused(void) {
        FILE *statm=fopen("/proc/self/statm", "r");
        if (statm) {
            unsigned long int size;
            if (fscanf(statm, "%lu",&size)==1) {
                fprintf(stdout, "Memory used: %lu Mo\n",(size*4)/1024);
            } else {
                /* FIXME */
            }
            if (fclose(statm)) {
                /* FIXME */
            }
        } else {
            /* FIXME */
        }
        return;
    }
     
    void test(char **ptr, size_t size){
        memused();
        *ptr=(char *)realloc(*ptr,size*sizeof(**ptr));
        if (! (*ptr)) {
            /* FIXME */
        } else {
            memused();
        }
        return;
    }
     
    int main(void) {
        char *ptr=NULL;
        test(&ptr,1000);
        test(&ptr,10*1024*1024);
        test(&ptr,100*1024*1024);
        free(ptr);
        memused();
        return 0;
    }

Discussions similaires

  1. Determiner le besoin en mémoire d'un programme Java
    Par meavy dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 05/02/2009, 15h15
  2. place en mémoire d'un programme
    Par clampin dans le forum Débuter
    Réponses: 1
    Dernier message: 17/11/2008, 17h35
  3. Problème mémoire sur un programme?
    Par theclem35 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 23/12/2007, 07h53
  4. [System] Récupération de la taille mémoire de son programme
    Par splend_f dans le forum Général Java
    Réponses: 13
    Dernier message: 02/04/2006, 03h24
  5. Réponses: 3
    Dernier message: 30/01/2006, 10h52

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