延迟后的C ++优化程序调用函数

时间:2018-09-12 23:21:25

标签: c++

我正在尝试对C ++上的递归斐波那契序列计算器进行基准测试。但令人惊讶的是,程序输出0纳秒,并在打印结果后开始计算。 (打印0纳秒后CPU使用率增加)

我认为这是编译器的优化功能。

#include <iostream>
#include <chrono>

int fib2(int n) {
    return (n < 2) ? n : fib2(n - 1) + fib2(n - 2);
}

int main(int argc, char* argv[])
{
    auto tbegin = std::chrono::high_resolution_clock::now();
    int a = fib2(50);
    auto tend = std::chrono::high_resolution_clock::now();

    std::cout << (tend - tbegin).count() << " nanoseconds" << std::endl;

    std::cout << "fib => " << a << std::endl;
}

输出:

0 nanoseconds

有功能吗?如果是,如何禁用此功能?

1 个答案:

答案 0 :(得分:2)

问题是,用值50调用的此函数的结果不适合int类型,它太大了。尝试改用int64_t


Live demo

请注意,我用更优化的功能替换了原来的Fibbonachi函数,因为执行时间太长,并且在线工具在一段时间后会中断执行。那不是程序或代码的错误,仅仅是对在线工具的保护。