如何找到其他c程序的运行时

时间:2012-07-10 09:28:06

标签: c++ c time

我想找到另一个程序运行所花费的时间; 我正在使用以下代码;

system("time ./a.out > garb");

它给出了非常奇怪的输出。

#include <stdio.h>

int main()
{

        long int i;

        for ( i = 0; i < 10000000; i++ ) {
                printf("Hello World!\n");
        }
        printf("C Program\n");
        return 0;
}

输出

0.31user 0.10system 0:00.41elapsed 99%CPU (0avgtext+0avgdata 1744maxresident)k
0inputs+253912outputs (0major+149minor)pagefaults 0swaps

4 个答案:

答案 0 :(得分:2)

一种方法是使用wait3wait4函数(如果系统中有这些函数)。

pid_t wait3(int *status, int options, struct rusage *rusage);    
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);

退出孩子后,您的程序将获得子进程的资源使用。

struct rusage的所有字段都不会更新,但前两个字段会说明您的需求:

struct rusage {
    struct timeval ru_utime; /* user CPU time used */
    struct timeval ru_stime; /* system CPU time used */
    ...

ru_utimeru_stime的总和是子进程使用的总CPU时间。

使用wait3 / wait4并不像调用system()函数那么简单。

编辑: 您应该通过将time的打印输出的两个值相加来获得相同的结果:

  

0.31user 0.10system

答案 1 :(得分:0)

我认为我们可以在系统中找到另一种方式而不是time。 类似的东西:

#include <stdio.h>
#include <time.h>

int main() 
{
    clock_t start = clock();
    system('./a.out');
    printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
    return (0);
}

答案 2 :(得分:0)

英特尔处理器插入了64位寄存器,用于计算进程的时钟。

http://en.wikipedia.org/wiki/Time_Stamp_Counter

答案 3 :(得分:0)

在我看来,使用C的库函数或系统调用很难得到准确的结果。相反,最好使用Performance API(PAPI)来获得更准确的结果。更具体地说,您可以看到PAPI定义的function