【时间测量】代码运行时间的测量方法【linux/window】

一,返回单位为毫秒 

#include<windows.h> 
DWORD dwStart =    GetTickCount(); 
 //   测试代码 

 DWORD      dwTime      =   GetTickCount() -    dwStart; 


注意:GetTickCount()精确度有限,跟CPU有关,一般精确度在16ms左右,最精确也不会精确过10ms,这就是说如果你的时间间隔在16ms以内的话,两个时间相减为0,如果大于16ms且小于32ms的话,两个时间相减为16ms(也不完全严格,有的时候会是15或者17,根据当时CPU的处理情况而定)。其实也就是说你得到的这个差是实际时间间隔除以16(具体是几取决于你机器的处理能力,但是不会小于10),把余数舍弃。


二,返回时间为秒 
#include<time.h> 
unsigned long start,stop; 
start=time(NULL); //取值为秒 
//你的程序 
stop=time(NULL); 
printf("运行时间:%ld",stop-start); 

三,精确计时法 

QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位 
计时.但是 QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以,必 
须 要 查 询 系 统 以 得 到 QueryPerformanceCounter() 返 回 的 嘀 哒 声 的 频 
率.QueryPerformanceFrequency()提供了这个频率值,返回每秒嘀哒声的个数.计算确切的时 

间是从第一次调用 QueryPerformanceCounter()开始的 
使用 window 操作系统本身提供的 API 接口,程序如下: 
#include<windows.h> 


LARGE_INTEGER Freq; LARGE_INTEGER start;                 LARGE_INTEGER end; 
QueryPerformanceFrequency(&Freq); // 获取时钟周期 
QueryPerformanceCounter(&start); // 获取时钟计数 


你的程序 
 QueryPerformanceCounter(&end); 
/*此处*1000,以毫秒为单位;*1000000 以微秒为单位*/ 
/*由于执行时间极短(可能是几微秒),所以采用微秒为单位*/ 

printf("%d",(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart); 


注意:1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)


例子:

#include <stdio.h>
#include<windows.h> 
int main()
{
	LARGE_INTEGER Freq; //64位有符号整数值.
	LARGE_INTEGER start;                
	LARGE_INTEGER end; 
	QueryPerformanceFrequency(&Freq); // 获取时钟周期  “1次/秒”,记做Hz(赫兹)。1Hz就是每秒一次
	QueryPerformanceCounter(&start); // 获取时钟计数 

    Sleep(1000);//毫秒为单位 
		
	QueryPerformanceCounter(&end); 
    /*此处*1000,以毫秒为单位;*1000000 以微秒为单位*/ 
    /*由于执行时间极短(可能是几微秒),所以采用微秒为单位*/
	/*  1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)  */ 
    printf("%d",(end.QuadPart-start.QuadPart)*1000/Freq.QuadPart);  
	
	return 0;
}




四,如果是在linux平台下面呢?

        时间的测量有多种方式。一种是C语言库函数 time(),它可以提供秒级的计时,比较粗糙。

                                                    一种是C语言库函数gettimeofday(),大约可以精确到微妙,但会受到CPU调度的影响。

                                                    一种是时间戳计时器(Time Stamp Counter),可以达到纳秒级计时精度。

     1)time 命令   — 执行命令并计时

                  time  find . -name "*.c" |xargs wc -l    // 统计执行命令时间

                  real          0m33.748s
                  user         0m0.772s
                  sys         0m1.044s

        (1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;

        (2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;

        (3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。

       其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。

       另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。


    2)微秒级测量方法

      

struct timeval

 {

              long tv_sec;         //秒域

              long tv_usec;       //微妙域

}


(tvend.tv_sec-tvstart.tv_sec)+(tvend.tv_usec-tvstart.tv_usec)/1000000 = 以秒为单位的计时时间。


以下得到以微秒为计时单位的时间


#include <sys/time.h>
#include "stdio.h"
int main()
{
    struct timeval tstart,tend;
    gettimeofday(&tstart,NULL);

     for(int i=0;i<10000;++i)
	printf("");

    gettimeofday(&tend,NULL);


    long int use_useconds=1000000*(tend.tv_sec - tstart.tv_sec) + (tend.tv_usec - tstart.tv_usec);

    printf("%ld\n",use_useconds);
    return 0;
}






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将代码Windows复制到虚拟机Linux,可以按照以下步骤进行操作: 1. 在Windows上找到要复制的代码文件。确保文件已保存并位于容易访问的位置。 2. 打开虚拟机软件,并登录到Linux虚拟机。 3. 在虚拟机的Linux桌面或终端中,找到合适的目录来存储代码文件。可以使用命令行来切换目录,或者通过图形界面进行导航。 4. 在Windows上选中要复制的代码文件,右键单击并选择“复制”选项。或者,您可以使用组合键“Ctrl + C”进行复制。 5. 在虚拟机的Linux桌面或终端中,右键单击并选择“粘贴”选项。或者,您可以使用组合键“Ctrl + V”进行粘贴。 6. 检查代码文件是否已成功复制到Linux虚拟机。您可以使用命令行的“ls”命令来查看当前目录中的文件列表,或者通过图形界面来检查。 7. 如果复制过程遇到问题,可以尝试使用共享文件夹或其他文件传输方法来复制代码文件。共享文件夹可以在虚拟机软件的设置中进行配置,并允许在虚拟机和主机系统之间共享文件。 需要注意的是,复制代码文件到Linux虚拟机时,可能需要确保代码文件具有适当的权限。您可能需要使用命令行的“chmod”命令来更改文件的权限,以确保可以在虚拟机中进行编辑和运行。另外,如果代码文件有依赖项或特定环境要求,您可能还需要在Linux虚拟机上进行安装和配置。 ### 回答2: 在复制代码Windows到虚拟机Linux的过程中,可以采用以下几种方式: 1. 虚拟机共享文件夹:首先,在虚拟机软件中设置共享文件夹,将Windows中的代码文件夹设置为共享。然后,在虚拟机Linux中挂载共享文件夹,将其作为一个目录挂载到Linux文件系统中。最后,通过复制和粘贴,将Windows中的代码文件复制到挂载的共享文件夹中即可。 2. 使用SSH:如果虚拟机Linux已经设置了SSH服务,我们可以通过SSH协议进行文件传输。在Windows中,可以使用一些SSH客户端工具(如PuTTY、Git Bash等),通过SSH登录到虚拟机Linux的终端界面。然后,在终端界面中使用SCP命令,将代码文件从Windows复制到虚拟机Linux中。 3. 使用FTP或SFTP:在Windows中,你可以安装一个FTP或SFTP服务器软件,并将代码文件夹设置为共享。在虚拟机Linux中,使用FTP或SFTP客户端连接到Windows上的FTP/SFTP服务器,并将代码文件从Windows复制到虚拟机Linux。 无论选择哪种方式复制代码,确保代码文件的完整性和正确性,并注意在复制过程中不要修改代码。此外,可以在复制前备份代码文件,以防不测发生。 ### 回答3: 要将代码Windows复制到虚拟机Linux,您可以按照以下步骤进行操作: 步骤1:将代码Windows系统复制到剪贴板。您可以选择代码文件并使用Ctrl + C命令将其复制到剪贴板中。 步骤2:在虚拟机Linux中启动终端或命令行界面。 步骤3:使用Ctrl + Shift + V命令将代码从剪贴板粘贴到Linux终端中。这将将代码从剪贴板复制到终端。 步骤4:如果代码较长,可能需要几秒钟才能完全粘贴到终端。请耐心等待。 步骤5:按下Enter键以确保代码被完全复制到终端。 步骤6:代码现在已经复制到虚拟机Linux中,您可以继续执行后续操作,例如编译和运行代码。 请注意,这只是将代码Windows复制到虚拟机Linux的一种方法。根据您使用的虚拟化软件和操作系统版本可能会有所不同。请参考相应的文档以获得更具体的指引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值