0

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

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

4 回答 4

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 时间。

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

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

0.31用户 0.10系统

于 2012-07-10T09:58:56.793 回答
0

i think we can found another way instead of time in system. Something like :

#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);
}
于 2012-07-10T09:33:57.003 回答
0

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

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

于 2012-07-10T10:10:26.847 回答
0

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

于 2012-07-10T10:12:05.090 回答