gpt4 book ai didi

c - 使用 clock_gettime 获取负值

转载 作者:太空狗 更新时间:2023-10-29 17:18:26 26 4
gpt4 key购买 nike

在下面的程序中,我尝试测量作业(for 循环)的执行时间。大多数时候它工作正常,但是,有时,它返回负值!我的第一个猜测是变量可能会溢出。谁能告诉我我是否正确?我该如何解决这个问题?

谢谢

int main(int argc, char **argv) 
{
long int ST;
long int ET;
struct timespec gettime_now;
clock_gettime(CLOCK_REALTIME, &gettime_now);
ST= gettime_now.tv_nsec;
for (i=0; i < 1000; i++)
a[i]=b[i];
clock_gettime(CLOCK_REALTIME, &gettime_now);
ET= gettime_now.tv_nsec;
printf("Time diff: %ld\n", ET-ST);
}

最佳答案

在这两种情况下,您都忽略了 struct timespectv_sec,而只是使用纳秒,这与 ST 一样不正确>EV 的 tv_nsec 可能是不同的秒。

来自 man ,

tv_sec - 代表纪元以来的秒数

tv_nsec - 当前秒数,以纳秒精度表示(1/1000000000 秒)

最好自己写一个函数来找出不同点。示例代码(未测试),

timespec diff(timespec start, timespec end)
{
timespec temp;

if ((end.tv_nsec-start.tv_nsec)<0
{
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
}
else
{
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

引用this用于实际的diff 函数和示例。

关于c - 使用 clock_gettime 获取负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com