我正在尝试使用constexpr
来评估性能差异。我使用以下代码:
#include<iostream>
using namespace std;
constexpr double factorial(int n) {
return n==0?1:n*factorial(n-1);
}
main() {
double a=0;
for(int i=0;i<10000000;i++) {
a+=factorial(100);
}
cout<<a<<endl;
}
我尝试了上述程序的两个版本,一个使用阶乘函数constexpr
,另一个没有。{我希望看到constexpr
版本在运行时运行得更好,但实际上运行速度较慢。以下是每项4项试验的测量结果(以秒为单位):
没有constexpr
:
2.691,2.835,2.768,2.748
使用constexpr
:
2.910,2.920,2.903,2.910
有人可以解释这背后的原因吗?我使用constexpr
错了吗?我使用的是g ++ 4.9.1,我使用了O3优化标志。
编辑:最初将代理分配给a
的代码。根据评论中的建议,它已经更新以添加结果。但性能差异仍然可见。
答案 0 :(得分:1)
a
是有利的。但是,编译器不需要这样做,除非您需要,例如,通过constexpr
constexpr
。在运行时import runpy
class Project(object):
def __init__(self, path):
module = runpy.run_path(path)
for k, v in module.items():
if not k.startswith('__'):
self.__dict__[k] = v
对函数没有任何影响。
我的测试结果非常接近(delta为~0.1s),正如预期的那样。