我的任务是实现三个不同的函数get_current_time_seconds1、2和3,然后必须估计各种函数的分辨率。我怎么估计呢?
您建议使用哪个计时功能?当我必须使用gcc -O0 -lrt Timing.c -o Timing进行编译时,编译器选项-O0 -lrt是什么意思?
%include <windows.i>
%include <std_string.i>
%include <std_wstring.i>
... ...
答案 0 :(得分:0)
我怎么估计呢?您建议使用哪种计时功能?
如果要获取各种计时元素的分辨率(精度),则可以使用clock_getres
函数,传入各种CLOCK_
id类型,例如:
#include <stdio.h>
#include <time.h>
static void printres(clockid_t id)
{
struct timespec ts;
int rc = clock_getres(id, &ts);
printf("clock id: %d\n", (unsigned int)id);
if (rc != 0) {
printf("Error: %d\n", rc);
return;
}
printf("tv_sec = %lu\ntv_nsec = %lu\n", ts.tv_sec, ts.tv_nsec);
}
int main(int argc, char** argv)
{
printres(CLOCK_REALTIME);
printres(CLOCK_MONOTONIC);
printres(CLOCK_PROCESS_CPUTIME_ID);
printres(CLOCK_THREAD_CPUTIME_ID);
return 0;
}
在我的系统上,tv_nsec
除CLOCK_THREAD_CPUTIME_ID
以外的所有其他均为1000
,对于CLOCK_THREAD_CPUTIME_ID
的{{1}}的值为tv_nsec
,这意味着其他时钟类型的精度为1毫秒(1000纳秒),而1
的精度为1纳秒。
对于第一个调用localtime
的函数,该精度为1秒,因为该函数以秒为单位计算从Unix时代开始的时间。
当我必须使用gcc -O0 -lrt Timing.c -o Timing进行编译时,编译器选项-O0 -lrt是什么意思?
对于某些CLOCK_THREAD_CPUTIME_ID
和gcc
之类的编译器,选项clang
表示在将代码编译到指定级别时优化代码,因此-O
表示 not < / em>完全优化代码,这通常在调试代码时很有用。
-O0
选项说可以针对指定的库进行编译,因此-l
说可以使用-lrt
库或“实时库”进行编译;在某些系统上这是必需的,因为可以在该库中定义rt
。
我希望能对您有所帮助。