21 Mart 2009, CUMARTESİ
Nasıl bellek kullanımı için c çalışma zamanında ?
benim programın çalışma zamanında kullanımı VİRT ve RES mem almak ve bunları görüntülemek istiyorum.
Denedim ÅŸimdiye kadar ne
getrusage (http://linux.die.net/man/2/getrusage)
int who = RUSAGE_SELF;
struct rusage usage;
int ret;
ret=getrusage(who,&usage);
cout<<usage.ru_maxrss;
ama ben her zaman 0.
CEVAP
22 Mart 2009, Pazar
Linux üzerinde, hiç bir şekilde buldum() blok aygıtçözüm. Bizim uygulamalar için, genel yarar bir rutin okuma dosyaları dayanarak biz kodlanmış/proc/pıd. Farklı sonuçlar veren bu dosyalar vardır. İşte biz düzenlenmiştir (soru etiketli C , ve biz ele G/Ç kullanarak C yapıları, ama öyle olmalı, kolayca uyarlanabilir C ı/o rutinleri gerekirse):
#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////
//
// process_mem_usage(double &, double &) - takes two doubles by reference,
// attempts to read the system-dependent data for a process' virtual memory
// size and resident set size, and return the results in KB.
//
// On failure, returns 0.0, 0.0
void process_mem_usage(double& vm_usage, double& resident_set)
{
using std::ios_base;
using std::ifstream;
using std::string;
vm_usage = 0.0;
resident_set = 0.0;
// 'file' stat seems to give the most reliable results
//
ifstream stat_stream("/proc/self/stat",ios_base::in);
// dummy vars for leading entries in stat that we don't care about
//
string pid, comm, state, ppid, pgrp, session, tty_nr;
string tpgid, flags, minflt, cminflt, majflt, cmajflt;
string utime, stime, cutime, cstime, priority, nice;
string O, itrealvalue, starttime;
// the two fields we want
//
unsigned long vsize;
long rss;
stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
>> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
>> utime >> stime >> cutime >> cstime >> priority >> nice
>> O >> itrealvalue >> starttime >> vsize >> rss; // don't care about the rest
stat_stream.close();
long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // in case x86-64 is configured to use 2MB pages
vm_usage = vsize / 1024.0;
resident_set = rss * page_size_kb;
}
int main()
{
using std::cout;
using std::endl;
double vm, rss;
process_mem_usage(vm, rss);
cout << "VM: " << vm << "; RSS: " << rss << endl;
}
Bunu PaylaÅŸ:

Nasıl bir süreç içinde CPU ve bellek k...
Nasıl gerçek bellek kullanımı ile en ü...
Nasıl bir java sınıfı çalışma zamanınd...
Nasıl Android çalışma zamanında geçerl...
Nasıl dp veya daldırma açısından ekran...