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
Version imprimable
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
En standard non, après tout dépend de ton système ... est même là je ne suis pas sûr :lol:
Et quel est ton système d'exploitation ?
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:
Voilà, ca t'aidera peut être.Code:
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 */
Nicolas
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.
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
Pour Windows, tu as l'API GetProcessMemoryInfo.Citation:
Envoyé par vinzzzz
Mémoire vive :) mon programme est sucéptible de prendre beaucoup de mémoire au cours du temps.Citation:
Envoyé par homeostasie
Je vais regarder l'API que propose Mayti4 pr windows. Si vous connaissez l'équivalent sous linux n'hésitez pas.
Ce n'est pas une question C. Demande à ton éditeur de lien de sortir la cartographie mémoire (map ou mapping).Citation:
Envoyé par vinzzzz
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
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:
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; }