Dies ist ein furchtbar hässlich und nicht tragbarer Weg, um die Speichernutzung zu bekommen, aber da getrusage() 's Speicher-Tracking auf Linux im Wesentlichen nutzlos, Lesen/proc // statm ist der einzige Weg, Ich weiß, um die Informationen über Linux zu bekommen.
Wenn jemand von sauberer, oder vorzugsweise mehr Cross-Unix Möglichkeiten der Speicherverwendung zu verfolgen, wäre ich sehr daran interessiert zu lernen, wie.
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);
}
Vom proc (5) man-Seite:
/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)
Leider ist die ru_idrss und ru_isrss Daten nicht zu meinem Kernel (Ubuntu Hardy) availabe: http://linux.die.net/man/2/getrusage – scotts
Leider werden alle Daten 0 auf meinem Kernel zeigt (Debian Wheezy) – Achim