1 读进程的计时器(使用间隔计数器,可测量的最小粒度不会小于时钟中断的间隔)
#include <sys/times.h>
struct tms{
clock_t tms_utime; /*用户时间*/
clock_t tms_stime; /*系统时间*/
clock_t tms_cutime; /*已回收的子进程的用户时间*/
clock_t tms_cstime; /*已回收的子进程的系统时间*/
};
clock_t times(struct tms *buf);
返回值以时钟滴答为单位。CLK_TCK指明每秒时钟滴答数。
times返回的是从系统启动开始已经经过的时钟滴答总数。可以通过两次调用times,计算返回值之差,计算一个程序中两个不同点之间的总时间。
ANSI C有一个clock函数,测量当前进程使用的总时间
#include <time.h>
clock_t clock(void);
要使此函数返回的时间变成妙,必须除以CLOCK_PER_SEC。
CLOCK_PER_SEC与CLK_TCK未必相同。
这种方法适合程序运行时间较长(>1s)
2 读周期计数器 适合程序运行时间<10ms
IA32计数器用rdtsc指令访问,将%edx设置为计数器的高32位,将%eax设置为计数器的低32位
gettimeofday
#include "time.h"
struct timeval {
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
}
int gettimeofday (struct timeval *tv, NULL);
若成功返回0,若失败返回-1
gettimeofday的实现随系统不同而不同,windows用间隔计数器实现,linux用周期计数器实现。
3972

被折叠的 条评论
为什么被折叠?



