c - 相同的代码每次执行时间都不一样
问题描述
我正在尝试获取一些我将在实验室实验中使用的代码的精确执行时间。我正在尝试一些简单的代码,但我总是得到不同的执行时间。你能帮我解决这个问题吗?
我正在尝试的代码是这个
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
int main() {
long start, end;
struct timeval timecheck;
gettimeofday(&timecheck, NULL);
start = (long)timecheck.tv_sec * 1000 + (long)timecheck.tv_usec / 1000;
usleep(200000); // 200ms
for (int i = 0; i < 10000000; ++i)
{/*
code
*/}
gettimeofday(&timecheck, NULL);
end = (long)timecheck.tv_sec * 1000 + (long)timecheck.tv_usec / 1000;
printf("%ld milliseconds elapsed\n", (end - start));
return 0;
}
结果是这样的
227 毫秒过去了
231 毫秒过去了
228 毫秒过去了
解决方案
3-5 毫秒的偏差是不用担心的。这几乎取决于四舍五入和措施。
如果差异更大,那么许多因素可以在这里发挥作用:
- 缓存状态(最近使用的部分内存处理速度更快)
- 进程优先级
- 多任务处理率(其他进程可能会与您竞争任何类型的资源)
- 系统调用延迟(它们只是用户空间吗?内核空间?)
推荐阅读
- mysql - 如何从具有某些条件的多对多关系中获取所有值
- typescript - 内容更新时 ion-virtual-scroll 闪烁
- r - 使字符串变量适应 R 中的特定特征
- python - 在 for 循环中识别附加值
- angular - Angular - 延迟加载条件路由
- java - Java CallableStatement setDate 值减少 1 天
- sql - 获取用于创建表的查询
- ios - 在 iOS 14 中为 UICollectionView 使用 UIMenuController?
- flutter - 颤动我的文本文件下拉按钮选项不选择
- jekyll - 是否有一个目录可以在构建时将项目放置在 _site 的根目录中?