gpt4 book ai didi

c++ - 奇怪的探查器行为 : same functions, 不同的表现

转载 作者:太空狗 更新时间:2023-10-29 22:53:07 24 4
gpt4 key购买 nike

我正在学习使用 gprof 然后我得到了这段代码的奇怪结果:

int one(int a, int b)
{
int i, r = 0;
for (i = 0; i < 1000; i++)
{
r += b / (a + 1);
}
return r;
}

int two(int a, int b)
{
int i, r = 0;
for (i = 0; i < 1000; i++)
{
r += b / (a + 1);
}
return r;
}

int main()
{
for (int i = 1; i < 50000; i++)
{
one(i, i * 2);
two(i, i * 2);
}
return 0;
}

这是分析器的输出

  %   cumulative   self              self     total           
time seconds seconds calls us/call us/call name
50.67 1.14 1.14 49999 22.80 22.80 two(int, int)
49.33 2.25 1.11 49999 22.20 22.20 one(int, int)

如果我调用一个然后两个结果是相反的,两个比一个花费更多的时间
两者都是相同的功能,但第一次调用总是比第二次花费更少的时间

这是为什么?

注意:汇编代码是完全一样的,代码是在没有优化的情况下编译的

最佳答案

我猜这是运行时优化中的一些侥幸 - 一个使用寄存器而另一个不使用或类似的小事。

系统时钟可能运行到 100nsec 的精度。平均调用时间 30nsec 或 25nsec 小于一个时钟滴答。一个时钟滴答的 5% 的舍入误差非常小。两个时间都足够接近零。

关于c++ - 奇怪的探查器行为 : same functions, 不同的表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com