Фигура C++ ЦП/использование памяти

У меня есть приложение C++, названное./вздор (к которому у меня есть исходный код),

когда я работаю./вздор

Я могу выполнить "вершину" и видеть, сколько используют память и CPU "./вздор".

Теперь, есть ли так или иначе для"./вздор" получить доступ к самой той информации? Т.е. когда я работаю./вздор, я хочу это к каждому второму дампу, это - CPU & Memory usage. Какой библиотекой я должен пользоваться, чтобы сделать это?

Я нахожусь на MacOSX; но я предпочел бы решение, которое работает над Linux также.

Спасибо!

5
задан Matt Curtis 17 February 2010 в 03:23
поделиться

3 ответа

Вы хотите getrusage () . На странице руководства :

int getrusage (int who, struct rusage * r_usage);

getrusage () возвращает информацию, описывающую ресурсы, используемые текущим процессом, или все его завершенные дочерние процессы. Параметр who - это либо RUSAGE_SELF , либо RUSAGE_CHILDREN . Буфер, на который указывает r_usage , будет заполнен следующей структурой:

 struct rusage {
struct timeval ru_utime; / * используемое время пользователя * / 
struct timeval ru_stime; / * используемое системное время * / 
long ru_maxrss; / * полный максимальный размер резидентного набора * / 
long ru_ixrss; / * общий объем общей текстовой памяти * / 
long ru_idrss; / * полный размер неразделенных данных * / 
long ru_isrss; / * полный размер неразделенного стека * / 
long ru_minflt; / * страница востребована * / 
long ru_majflt; / * ошибки страницы * / 
long ru_nswap; / * свопы * / 
long ru_inblock; / * блокировать операции ввода * / 
long ru_oublock; / * блокировать операции вывода * / 
long ru_msgsnd; / * сообщения отправлены * / 
long ru_msgrcv; / * сообщения получены * / 
long ru_nsignals; / * сигналы получены * / 
long ru_nvcsw; / * добровольное переключение контекста * / 
long ru_nivcsw; / * непроизвольное переключение контекста * / 
}; 
 
11
ответ дан 13 December 2019 в 05:34
поделиться

Если вы заинтересованы в использовании этой информации для профилирования вашего приложения, вы можете использовать dtrace на OSX:

http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

0
ответ дан 13 December 2019 в 05:34
поделиться

Linux предоставляет эту информацию в:

/proc/<pid>/stat

И вы можете получить текущий pid с помощью:

getpid()

Returns pid_t.

Вот кусок кода, который я нашел, отображающий эту информацию в разумном формате: http://brokestream.com/procstat.html

Я не знаю, работает ли это на Mac OSX.

EDIT: Mac OS X не имеет файловой системы procfs, поэтому это не будет работать на Mac OSX, извините!

1
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: