Esta es una manera terriblemente feo y no portátiles de conseguir el uso de la memoria, pero desde getrusage() 's de seguimiento de memoria es esencialmente inútil en Linux, la lectura/proc // statm es la única manera Sé de obtener la información sobre Linux.
Si alguien sabe de una manera más limpia, o preferiblemente más transversal entre Unix de seguimiento de uso de memoria, estaría muy interesado en aprender cómo hacerlo.
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);
}
Desde el proc (5) página de manual:
/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)
Desafortunadamente los datos ru_idrss y ru_isrss no se halla disponible a mi kernel (Ubuntu Hardy): http://linux.die.net/man/2/getrusage – scotts
Por desgracia todos los datos se muestran 0 en mi kernel (Debian Wheezy) – Achim