C'est une façon terriblement laid et non portable d'obtenir l'utilisation de la mémoire, mais comme le suivi de la mémoire de getrusage() est essentiellement inutile sur Linux, lecture/proc // statm est la seule façon Je sais d'obtenir l'information sur Linux.
Si quelqu'un connaît des méthodes Unix plus propres, ou de préférence plus croisées, pour suivre l'utilisation de la mémoire, je serais très intéressé à apprendre comment.
typedef struct {
unsigned long size,resident,share,text,lib,data,dt;
} statm_t;
void read_off_memory_status(statm_t& result)
{
unsigned long dummy;
const char* statm_path = "/proc/self/statm";
FILE *f = fopen(statm_path,"r");
if(!f){
perror(statm_path);
abort();
}
if(7 != fscanf(f,"%ld %ld %ld %ld %ld %ld %ld",
&result.size,&result.resident,&result.share,&result.text,&result.lib,&result.data,&result.dt))
{
perror(statm_path);
abort();
}
fclose(f);
}
De la proc (5) page man:
/proc/[pid]/statm
Provides information about memory usage, measured in pages.
The columns are:
size total program size
(same as VmSize in /proc/[pid]/status)
resident resident set size
(same as VmRSS in /proc/[pid]/status)
share shared pages (from shared mappings)
text text (code)
lib library (unused in Linux 2.6)
data data + stack
dt dirty pages (unused in Linux 2.6)
Malheureusement, le ru_idrss et les données ru_isrss n'est pas Availabe à mon noyau (Ubuntu Hardy): http://linux.die.net/man/2/getrusage – scotts
Malheureusement toutes les données montre 0 sur mon noyau (Debian Wheezy) – Achim