如何获取函数的RAM和CPU使用率?

时间:2013-10-19 19:10:30

标签: c linux windows cpu-usage ram

让我们说,我有一个功能(或功能),需要很长时间(墙上的时间)才能执行,例如:

#include "stdafx.h"
#include <math.h>
#include <windows.h>

void fun()
{
  long sum = 0L;
  for (long long i = 1; i < 10000000; i++){
        sum += log((double)i);
    }
 }

double cputimer()
{
    FILETIME createTime;
    FILETIME exitTime;
    FILETIME kernelTime;
    FILETIME userTime;


    if ( GetProcessTimes( GetCurrentProcess( ),
        &createTime, &exitTime, &kernelTime, &userTime ) != -1 )
    {
        SYSTEMTIME userSystemTime;
        if ( FileTimeToSystemTime( &userTime, &userSystemTime ) != -1 )
            return (double)userSystemTime.wHour * 3600.0 +
            (double)userSystemTime.wMinute * 60.0 +
            (double)userSystemTime.wSecond +
            (double)userSystemTime.wMilliseconds / 1000.0;
    }

}

int _tmain(int argc, _TCHAR* argv[])
{
    double start, stop;

    start = cputimer();
    fun();
    stop = cputimer();


    printf("Time taken: %f [seconds]\n", stop - start);

    return 0;
}

我想测量此函数的CPU负载和此函数调用使用的RAM使用情况。那可能吗?我怎样才能做到这一点?我对Windows和Linux解决方案感兴趣。

2 个答案:

答案 0 :(得分:1)

Windows有GetProcessTimes function可以为您提供CPU时间。另请查看Process Status API

还有SIGAR与平台无关。

在Linux上,您可以尝试使用getrusage

答案 1 :(得分:1)

在POSIX上,您可以尝试使用getrusage,方式类似于检查待机时间。不确定窗户。