发布于 2012-10-14 15:27:41
如果您正在使用GNU gcc/g++:
尝试用--覆盖率重新编译,重新运行程序,并使用gprof实用程序分析结果文件.它还将打印函数的执行时间。
编辑:编译并链接到-pg,而不是--覆盖率,--覆盖率是用于gcov (实际执行了哪些行)。
发布于 2012-10-14 15:37:53
您可以在标准库中使用<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;
}
}发布于 2012-10-14 15:37:37
你需要自己测量时间。我通常使用的小秒表课程如下所示:
#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可能不是函数的最佳名称,因为这个名称的函数已经存在于标准库中。你可以想出一个更好的。;)
编辑:请注意,时间记录来自C++11。
https://stackoverflow.com/questions/12883493
复制相似问题