【发布时间】:2014-09-16 15:57:59
【问题描述】:
我有一个调用两个用户定义函数的主函数。这两个函数以不同的方式(在一个函数中使用 if else 而在另一个函数中不使用 if else)执行相同的任务(在此简单选择中,选择因子为 50%)。我测量了这两个函数的执行时间。
int main()
{
clock_t t;
period=clock();
func1();
period=clock()-period;
print period
period=clock();
func2();
period=clock()-period;
print period
}
void func1()
{
int A[100000],B[100000],in=0;
for (i=0;i<100000;i++)
{
A[i]=i;
}
for (i=0;i<100000;i++)
{
if(A[i]==3)
B[in++]=i;
}
}
Func2 与此类似,只是我将 if 替换为非分支语句。
当我执行程序时,首先调用哪个函数需要更多时间。在上述情况下, func1 需要更多时间。如果我先调用 func2 然后调用 func1 ,那么 func2 需要更多时间。我真的不明白这背后的逻辑。
谁能解释一下。
【问题讨论】:
-
可能是因为第一个实现将输入集带入了缓存。不过,如果没有看到实际来源就很难说。
-
好的 2 分钟...我将使用源代码编辑问题
-
@vinodc,您的代码不可编译。如果您按照stackoverflow.com/help/mcve 的指南发布代码,您可能会得到一些积极的反馈。
-
您的测试实际表明,人们认为对性能有影响的事情通常不会,而确实会产生影响的事情是出乎意料的。至少你做了一个测试,很多人“只知道”什么是慢的,为什么并“修复”它
标签: c++