如何在Linux上测量C的执行时间

eqqqjvef  于 2023-04-29  发布在  Linux
关注(0)|答案(3)|浏览(172)

我正在研究实时数据的加密。我开发了加密和解密算法。现在我想用C语言测量相同的在Linux平台上的执行时间如何正确测量它?.我已经试过如下

gettimeofday(&tv1, NULL);
         /* Algorithm Implementation Code*/
             gettimeofday(&tv2, NULL);

        Total_Runtime=(tv2.tv_usec - tv1.tv_usec) +          
                      (tv2.tv_sec - tv1.tv_sec)*1000000);

这就给了我微秒的时间。是正确的时间测量方法还是我应该使用其他的功能?任何提示将不胜感激。

vm0i2vca

vm0i2vca1#

clock():返回的值是到目前为止使用的CPU时间,作为一个clock_t;

逻辑

获取程序开始和结束时的CPU时间。差异是你想要的。

代码

#include <time.h>

/* ... */

clock_t begin = clock();

/****  code ****/

clock_t end = clock();
double time_spent = (double)(end - begin) //in microseconds

为了得到使用的秒数,我们将差值除以CLOCKS_PER_SEC

更准确

在C11中,timespec_get()提供**纳秒 * 范围内的时间测量。但准确性是由实现定义的,并且可以变化。

r55awzrz

r55awzrz2#

读取time(7)。您可能希望将clock_gettime(2)CLOCK_PROCESS_CPUTIME_IDCLOCK_MONOTONIC一起使用。或者您可以只使用clock(3)(表示以微秒为单位的CPU时间,因为CLOCK_PER_SEC总是一百万)。
如果您想测试整个程序(可执行程序),请使用time(1)命令。

ozxc1zmp

ozxc1zmp3#

测量一个正确的加密代码的执行时间是简单的,尽管有点乏味。一个好的加密代码的运行时间与输入的质量无关--不管你对它做什么,它总是需要相同数量的操作。如果不是这样,你有一个问题,称为定时攻击。
因此,您唯一需要做的就是展开所有循环,计算操作码,并将各个操作码乘以其时钟滴答数,以获得确切的运行时间。有一个问题:一些CPU的某些操作具有可变数量的时钟节拍,您可能必须将其更改为具有固定数量时钟节拍的操作。他的背部疼痛,承认。
如果你只想知道代码是否运行得足够快,以适应你的实时操作系统的插槽,你可以简单地把它取到最大值,然后用NOOP填充下面的情况(你的实时操作系统可能有一个例程)。

相关问题