【发布时间】:2018-10-07 03:30:18
【问题描述】:
我刚刚了解到constexpr说明符函数可以在编译过程中运行,我尝试用Debug x86 Mode检查VS 2017的实际性能,结果显示它们之间的时间差异很小。它仍然经过了很多时间,而不是“0”。我是不是做错了什么,谁能帮帮我,非常感谢!
#include <iostream>
#include <time.h>
size_t r_fun(size_t n) noexcept
{
if (n == 0) return 0;
if (n == 1) return 1;
return r_fun(n - 1) + r_fun(n - 2);
}
constexpr size_t c_fun(size_t n) noexcept
{
if (n == 0) return 0;
if (n == 1) return 1;
return c_fun(n - 1) + c_fun(n - 2);
}
int main()
{
clock_t start, finish;
start = clock();
auto r_x = r_fun(40);
finish = clock();
std::cout <<"result:"<< r_x<< "\ttime:" << (double)(finish - start) << std::endl;
start = clock();
static const auto c_x = c_fun(40);
finish = clock();
std::cout << "result:" << c_x << "\ttime:" << (double)(finish - start) << std::endl;
return 0;
}
【问题讨论】:
-
actual performance in VS 2017 with Debug x86 Mode,在调试模式下不检查性能。 -
constexpr不存在以提高性能。因此,在这种情况下它并没有提高性能(即使忽略调试构建)这一事实并不是该功能或其实现的问题。
标签: c++ visual-studio c++11 c++14 compiler-optimization