首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >语句执行的定时- C++

语句执行的定时- C++
EN

Stack Overflow用户
提问于 2012-10-14 15:13:42
回答 8查看 25.3K关注 0票数 8

可能重复: 如何在C++中计算代码段的执行时间

如何在某些C++代码中获得一组特定语句所花费的时间?

类似于Linux下的time实用程序,但只适用于某些特定的语句。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-10-14 15:27:41

如果您正在使用GNU gcc/g++:

尝试用--覆盖率重新编译,重新运行程序,并使用gprof实用程序分析结果文件.它还将打印函数的执行时间。

编辑:编译并链接到-pg,而不是--覆盖率,--覆盖率是用于gcov (实际执行了哪些行)。

票数 1
EN

Stack Overflow用户

发布于 2012-10-14 15:37:53

您可以在标准库中使用<chrono>头:

代码语言:javascript
运行
复制
#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;
    }
}
票数 23
EN

Stack Overflow用户

发布于 2012-10-14 15:37:37

你需要自己测量时间。我通常使用的小秒表课程如下所示:

代码语言:javascript
运行
复制
#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。

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

https://stackoverflow.com/questions/12883493

复制
相关文章

相似问题

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