首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/C++程序效率的度量

C/C++程序效率的度量
EN

Stack Overflow用户
提问于 2016-03-08 10:14:33
回答 6查看 2.2K关注 0票数 1

我认为衡量我的程序效率的最好方法是检查它运行所用的时间,然而当我这样做时,我总是得到随机的时间。

我使用了如下代码,就像Roger Pate在this这个线程中所展示的那样:

代码语言:javascript
复制
#include <ctime>

void func()
{
    using namespace std;
    clock_t begin = clock();

    //Function to measure here

    clock_t end = clock();
    double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
}

我认为这是因为我有几个程序在后台运行。

我不想每次都重新启动我的计算机,我想重新检查我的函数的时间,所以我的问题是:有没有更好的方法来测量程序的效率?

IDE为Codeblock,操作系统为Win7 64位。

EN

回答 6

Stack Overflow用户

发布于 2016-03-08 10:30:31

对于现代的多千兆赫兹CPU和高速RAM I/O,除非您的代码需要几分钟左右的时间来运行,否则测量其执行时间不太可能产生任何有意义的结果。信噪比太高了。I/O中断和自然的抢占式多任务将产生太多的噪音,并淹没任何有意义的运行时指标。

特别是在MS Windows上,就像您的情况一样,它不断地启动各种后台操作系统进程。重新启动你的电脑只会让事情变得更糟。在接下来的几分钟内,Windows O/S通常会在重新启动后启动大量后台进程,这些进程会执行这样或那样的操作。通常情况下,你需要等待10-15分钟,然后自然的背景活动才会平静下来。

票数 4
EN

Stack Overflow用户

发布于 2016-03-08 11:07:32

您需要测量用户时间。您可以在基于UNIX的系统中使用time命令(https://en.wikipedia.org/wiki/Time_(Unix) .我不确定微软是否有类似的东西。

用户时间是操作系统为您的进程测量的时间,因此它更准确地描述了您的程序运行了多长时间。它之所以能够做到这一点,是因为它是实体调度任务。

票数 2
EN

Stack Overflow用户

发布于 2016-03-08 22:30:50

如果您担心I/O中断或抢占式多任务的噪声,请使用GetThreadTimes函数。

但是,我更关心clock()函数的解析。在Windows上,我会使用QueryPerformanceCounter函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35857689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档