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
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![]()
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 !
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 : 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 */
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.Envoyé par vinzzzz
Mémoire viveEnvoyé par homeostasie
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.
Ce n'est pas une question C. Demande à ton éditeur de lien de sortir la cartographie mémoire (map ou mapping).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 : 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; }
Partager