可能重复:
How to Calculate Execution Time of a Code Snippet in C++
如何在某些C ++代码中获取特定语句集所花费的时间?
类似于Linux下的time
实用程序,但仅适用于某些特定语句。
答案 0 :(得分:10)
您可以使用标准库中的<chrono>
标题:
#include <chrono>
#include <iostream>
unsigned long long fib(unsigned long long n) {
return (0==n || 1==n) ? 1 : fib(n-1) + fib(n-2);
}
int main() {
unsigned long long n = 0;
while (true) {
auto start = std::chrono::high_resolution_clock::now();
fib(++n);
auto finish = std::chrono::high_resolution_clock::now();
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(finish-start);
std::cout << microseconds.count() << "µs\n";
if (microseconds > std::chrono::seconds(1))
break;
}
}
答案 1 :(得分:3)
您需要自己测量时间。我通常使用的小秒表课程看起来像这样:
#include <chrono>
#include <iostream>
template <typename Clock = std::chrono::steady_clock>
class stopwatch
{
typename Clock::time_point last_;
public:
stopwatch()
: last_(Clock::now())
{}
void reset()
{
*this = stopwatch();
}
typename Clock::duration elapsed() const
{
return Clock::now() - last_;
}
typename Clock::duration tick()
{
auto now = Clock::now();
auto elapsed = now - last_;
last_ = now;
return elapsed;
}
};
template <typename T, typename Rep, typename Period>
T duration_cast(const std::chrono::duration<Rep, Period>& duration)
{
return duration.count() * static_cast<T>(Period::num) / static_cast<T>(Period::den);
}
int main()
{
stopwatch<> sw;
// ...
std::cout << "Elapsed: " << duration_cast<double>(sw.elapsed()) << '\n';
}
duration_cast可能不是该函数的最佳名称,因为标准库中已存在具有此名称的函数。随意想出一个更好的。 ;)
编辑:请注意,chrono来自C ++ 11。
答案 2 :(得分:2)
您需要编写一个简单的计时系统。 c ++中没有内置方式。
#include <sys/time.h>
class Timer
{
private:
struct timeval start_t;
public:
double start() { gettimeofday(&start_t, NULL); }
double get_ms() {
struct timeval now;
gettimeofday(&now, NULL);
return (now.tv_usec-start_t.tv_usec)/(double)1000.0 +
(now.tv_sec-start_t.tv_sec)*(double)1000.0;
}
double get_ms_reset() {
double res = get_ms();
reset();
return res;
}
Timer() { start(); }
};
int main()
{
Timer t();
double used_ms;
// run slow code..
used_ms = t.get_ms_reset();
// run slow code..
used_ms += t.get_ms_reset();
return 0;
}
请注意,测量本身会显着影响运行时间。
答案 3 :(得分:2)
如果您使用的是GNU gcc / g ++:
尝试使用--coverage重新编译,重新运行程序并使用gprof实用程序分析生成的文件。它还会打印函数的执行时间。
编辑:使用-pg编译和链接,而不是使用--coverage,--coverage用于gcov(实际执行哪些行)。
答案 4 :(得分:2)
std::chrono
或boost::chrono
(如果您的编译器不支持C ++ 11)。
std::chrono::high_resolution_clock::time_point start(
std::chrono::high_resolution_clock::now() );
....
std::cout << (std::chrono::high_resolution_clock::now() - start);
答案 5 :(得分:2)
可能重复:How to Calculate Execution Time of a Code Snippet in C++
您可以使用time.h C标准库(在http://www.cplusplus.com/reference/clibrary/ctime/更详细地解释)。以下程序可以满足您的需求:
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
clock_t t1,t2;
t1=clock();
//code goes here
t2=clock();
float diff = ((float)t2-(float)t1)/CLOCKS_PER_SEC;
cout << "Running time: " << diff << endl;
return 0;
}
你也可以这样做:
int start_s=clock();
// the code you wish to time goes here
int stop_s=clock();
cout << "time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000 << endl;
答案 6 :(得分:1)
这是非常精细的代码片段,适用于Windows和Linux:https://stackoverflow.com/a/1861337/1483826
要使用它,运行它并将结果保存为“开始时间”和操作后 - “结束时间”。减去并除以您需要的任何精度。
答案 7 :(得分:0)
您可以使用#inclide <ctime>
标头。 It's functions and their uses are here。假设您想要查看代码花费的时间。您必须在该部分开始之前获取当前时间,并在该部分结束之后再获取另一个当前时间。然后取两次的差异。现成的函数在ctime
内声明,以完成所有这些工作。只需查看以上链接即可。