📅  最后修改于: 2023-12-03 15:27:00.113000             🧑  作者: Mango
在C编程中,测量时间是非常重要的一个操作,因为很多时候需要对程序的运行时间进行评估和优化。在本文中,我们将介绍C语言中常用的几种测量时间的方法。
clock()
函数返回程序执行以来的处理器时钟数,以毫秒为单位。它的函数原型如下:
#include <time.h>
clock_t clock(void);
示例代码:
#include <stdio.h>
#include <time.h>
int main() {
clock_t start_t, end_t; // 声明 clock_t 类型变量
double total_t;
start_t = clock(); // 记录开始时间
// 执行需要测量时间的程序
for (int i = 0; i < 1000000; i++) {
printf("i = %d\n", i);
}
end_t = clock(); // 记录结束时间
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC; // 计算程序运行时间
printf("程序运行时间为: %f 秒\n", total_t); // 输出程序运行时间
return 0;
}
输出结果:
i = 0
i = 1
i = 2
......
i = 999998
i = 999999
程序运行时间为: 0.036000 秒
gettimeofday()
函数返回当前时间和时区信息。它的函数原型如下:
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
示例代码:
#include <stdio.h>
#include <sys/time.h>
int main() {
struct timeval start_t, end_t;
double total_t;
gettimeofday(&start_t, NULL); // 记录开始时间
// 执行需要测量时间的程序
for (int i = 0; i < 1000000; i++) {
printf("i = %d\n", i);
}
gettimeofday(&end_t, NULL); // 记录结束时间
total_t = (double)(end_t.tv_usec - start_t.tv_usec) / 1000000 + (double)(end_t.tv_sec - start_t.tv_sec); // 计算程序运行时间
printf("程序运行时间为: %f 秒\n", total_t); // 输出程序运行时间
return 0;
}
输出结果:
i = 0
i = 1
i = 2
......
i = 999998
i = 999999
程序运行时间为: 0.038042 秒
clock_gettime()
函数可以获取高分辨率系统时间,它的函数原型如下:
#include <time.h>
int clock_gettime(clockid_t clock_id, struct timespec *tp);
示例代码:
#include <stdio.h>
#include <time.h>
int main() {
struct timespec start_t, end_t;
double total_t;
clock_gettime(CLOCK_MONOTONIC, &start_t); // 记录开始时间
// 执行需要测量时间的程序
for (int i = 0; i < 1000000; i++) {
printf("i = %d\n", i);
}
clock_gettime(CLOCK_MONOTONIC, &end_t); // 记录结束时间
total_t = (double)(end_t.tv_nsec - start_t.tv_nsec) / 1000000000.0 + (double)(end_t.tv_sec - start_t.tv_sec); // 计算程序运行时间
printf("程序运行时间为: %f 秒\n", total_t); // 输出程序运行时间
return 0;
}
输出结果:
i = 0
i = 1
i = 2
......
i = 999998
i = 999999
程序运行时间为: 0.038043 秒
以上介绍了C语言中常用的三种测量时间的方法。其中,clock()
函数和gettimeofday()
函数适用于大多数平台,clock_gettime()
函数适用于支持POSIX的操作系统。在使用时需要根据实际情况选择合适的方法。