怎么用C语言来计算一个函数调用了多久可以通过计算时间差的方法来计算一个函数调用了多久 。
具体细节如下c语言输出函数执行时间:
计算函数执行时间是评价程序效率的一种常用方法 。
可以在调用一个函数之间获取当前时间c语言输出函数执行时间,在调用之后再次获取当前时间,然后计算二者的时间差 。
但是如果一个函数执行时间非常短,会得到两个时间差为0的情况,此时可以修改程序为调用该函数1000次 , 然后把时间差除以1000 。
得到当前时间的方法是:首先程序最前面添加头文件#includetime.h,然后通过调用time(NULL)获取当前时间 。
用C语言,怎么算出主函数调用函数时,该函数的执行时间 。举个例子,谢谢啊 。请高手帮忙int main()
{
int TimeStart = GetTickCount();
Sum();//这个是你要调用的函数
intTimeEnd = GetTickCount();
int Time = TimeEnd - TimeStart;
//Time的值 就是调用Sum()函数所用的时间
}
简单的写了一下,希望能帮到你
编写一个C语言语句,要求输出这个程序需要运行的时间(用clock()做) 该怎么写?#include stdio.h
#include time.h
int main(void)
{
int i=123456789;
clock_t start, end;
start = clock();
while(i--);
end = clock();
printf("The time was: %d\n", (end - start));//单位是毫秒,注意是%d,不再是%f
printf("The time was: %f\n", (double)(end - start) / CLK_TCK); //单位是秒
return 0;
}
C语言中怎样测试函数执行时间有4种方法可以达成测算程序运行时间c语言输出函数执行时间的目的 。
它们分别是使用clock, times, gettimeofday, getrusage来实现的 。
下面就来逐一介绍c语言输出函数执行时间,并比较它们的优劣点 。
系统测试环境:
VirtualBox (Ubuntu 9.10)
gcc version 4.4.1
【c语言输出函数执行时间 c语言输出程序运行时间】libc6 2.10.1-0ubuntu16
Core Duo T2500 2GMHz
例程如下:
只要修改第11行的定义值,就可以使用不同的测量方法了 。
#include sys/time.h
#include sys/resource.h
#include unistd.h
#include stdio.h
#include time.h
#define TEST_BY_CLOCK(char)(0x00)
#define TEST_BY_TIMES(char)(0x01)
#define TEST_BY_GETTIMEOFDAY(char)(0x02)
#define TEST_BY_GETRUSAGE(char)(0x03)
#define TEST_METHOD(TEST_BY_GETTIMEOFDAY)
#define COORDINATION_X(int)(1024)
#define COORDINATION_Y(int)(1024)
static int g_Matrix[COORDINATION_X][COORDINATION_Y];
double getTimeval()
{
struct rusage stRusage;
struct timeval stTimeval;
if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)
{
gettimeofday(stTimeval, NULL);
}
else if (TEST_METHOD == TEST_BY_GETRUSAGE)
{
getrusage(RUSAGE_SELF, stRusage);
stTimeval = stRusage.ru_utime;
}
return stTimeval.tv_sec(double)stTimeval.tv_usec*1E-6;
}
int main()
{
int i, j;
int n = 0;
clock_t clockT1, clockT2;
double doubleT1, doubleT2;
if (TEST_METHOD == TEST_BY_CLOCK)
{
clockT1 = clock();
}
else if (TEST_METHOD == TEST_BY_TIMES)
{
times(clockT1);
}
else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)
{
doubleT1 = getTimeval();
}
else if (TEST_METHOD == TEST_BY_GETRUSAGE)
{
doubleT1 = getTimeval();
}
for (i = 0; iCOORDINATION_X; i)
{
for (j = 0; jCOORDINATION_Y; j)
{
g_Matrix[i][j] = i * j;
}
}
if (TEST_METHOD == TEST_BY_CLOCK)
{
clockT2 = clock();
printf("Time result tested by clock = .30f\n",(double)(clockT2 - clockT1)/CLOCKS_PER_SEC);
}
else if (TEST_METHOD == TEST_BY_TIMES)
{
times(clockT2);
printf("Time result tested by times = .30f\n", (double)(clockT2 - clockT1)/sysconf(_SC_CLK_TCK));
}
else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY)
{
doubleT2 = getTimeval();
printf("Time result tested by gettimeofday = .30f\n",(double)(doubleT2 - doubleT1));
}
else if (TEST_METHOD == TEST_BY_GETRUSAGE)
{
doubleT2 = getTimeval();
printf("Time result tested by getrusage = .70f\n", (double)(doubleT2 - doubleT1));
}
return 0;
}
1. 使用clock的方法:
clock是ANSI C的标准库函数,关于这个函数需要说明几点 。
首先 , 它返回的是CPU耗费在本程序上的时间 。也就是说,途中sleep的话,由于CPU资源被释放,那段时间将不被计算在内 。
其次,得到的返回值其实就是耗费在本程序上的CPU时间片的数量,也就是Clock Tick的值 。该值必须除以CLOCKS_PER_SEC这个宏值,才
能最后得到ss.mmnn格式的运行时间 。在POSIX兼容系统中,CLOCKS_PER_SEC的值为1,000,000的,也就是
1MHz 。
最后,使用这个函数能达到的精度大约为10ms 。
2. 使用times的方法:
times的用法基本和clock类似 , 同样是取得CPU时间片的数量,所不同的是要除以的时间单位值为sysconf(_SC_CLK_TCK) 。
3. 使用gettimeofday的方法:
用gettimeofday直接提取硬件时钟进行运算,得到的结果的精度相比前两种方法提高了很多 。
但是也正由于它提取硬件时钟的原因,这个方法只能计算程序开始时间和结束时间的差值 。而此时系统中如果在运行其他的后台程序,可能会影响到最终结果的值 。如果后台繁忙 , 系统dispatch过多的话,并不能完全真实反映被测量函数的运行时间 。
4. 使用getrusage的方法:
getrusage得到的是程序对系统资源的占用信息 。只要指定了RUSAGE_SELF,就可以得到程序本身运行所占用的系统时间 。
关于c语言输出函数执行时间和c语言输出程序运行时间的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- r2pg数据库,rs数据库
- 腾讯云怎么弄虚拟机,腾讯云有没有虚拟主机
- oracle删除重复的数据,oracle删除重复数据语句
- linux命令算数 linux 计算命令
- Flutter显示视频的简单介绍
- 联通服务器突然重启,联通服务器崩溃了?
- oracle怎么样建索引 oracle建立索引语句
- sap清账什么意思,sap手工清帐步骤
- 游戏大全古装角色扮演,古装角色扮演手游排行榜