【问题标题】:How to find the execution time of code in C?如何在C中找到代码的执行时间?
【发布时间】:2016-02-28 14:18:36
【问题描述】:

我找到了这个代码here。如果我划分(t2-t1)/CLOCK_PER_SEC我会得到几秒钟的时间吗?如何找到 CLOCK_PER_SEC?有没有更好的方法来查找代码或函数的执行时间?

#include<time.h> 
main()
{
    clock_t t1=clock();
    // Your code that takes more than 1 sec; 
    clock_t t2=clock();
    printf("The time taken is.. %g ", (t2-t1));
    ..

【问题讨论】:

  • 你能说为什么不赞成我的问题吗?
  • 它是CLOCKS_PER_SEC 而不是CLOCK_PER_SEC,可以在time.h 中找到。请参阅link in your link
  • 好吧thnx,但我认为这段代码找不到实时stackoverflow.com/questions/10455905/…。 Gsamaras 回答了它。
  • 但是您没有要求“实时”。您的问题是“如何在 C 中找到代码的执行时间?”同样的道理,如果我花 30 分钟解决一个问题,2 小时购物,然后 30 分钟解决问题,我只花了 1 小时,而不是 3 小时。
  • 找不到C代码的执行时间,因为C代码永远不会被执行。必须先编译 C 代码。然后执行的是编译后的代码。执行时间取决于您为哪种架构编译了代码,您使用了哪个编译器和哪些选项,以及您在哪个确切配置上运行编译代码的确切处理器派生。然后根据执行历史(缓存和管道状态),您的执行时间仍然可以变化几个数量级。更不用说中断了。基本上你的问题根本没有意义。

标签: c time


【解决方案1】:

你可以这样做:

#include <sys/time.h>
#include <time.h>

typedef struct timeval wallclock_t;

void wallclock_mark(wallclock_t *const tptr)
{
    gettimeofday(tptr, NULL);
}

double wallclock_since(wallclock_t *const tptr)
{
    struct timeval  now;
    gettimeofday(&now, NULL);

    return difftime(now.tv_sec, tptr->tv_sec)
            + ((double)now.tv_usec - (double)tptr->tv_usec) / 1000000.0;
}

int main(void)
{
    wallclock_t  t;
    double  s;

    wallclock_mark(&t);

    /*
     * Do something
    */

    s = wallclock_since(&t);
    printf("That took %.9f seconds wall clock time.\n", s);
    return 0;
}

你可以在我的Time measurements阅读更多内容。

【讨论】:

  • 我知道@user3577378。顺便说一句,我没有投反对票,我投了赞成票,因为这也是一开始就让我兴奋的事情。你可以比较这两段代码,因为我真的不记得告诉你了。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多