【发布时间】:2018-10-30 16:26:35
【问题描述】:
我编写了一个 C 程序来将温度从华氏温度转换为摄氏温度。当我运行我的程序时,我注意到当循环即将结束时执行速度急剧增加(这不应该按照我的代码)。我试图用不同的值初始化循环,并改变了循环的结束,但行为仍然保持不变。
我附上一张图片并发布执行速度视频的链接。
我提供了视频,因此您可以看到当循环越过 399999 时,执行速度会提高,并且在图像中您可以看到编译器的一些细节/版本。
请告诉我为什么会这样。 谢谢。
Link to the video of execution speed
我的代码:-
// Program to convert temperature from
// fahrenheit scale to celsius scale.
#include <stdio.h>
main()
{
float faren, celsius;
for(faren=200000; faren<=900000; faren = faren+20)
{
celsius = (5.0/9.0)*(faren-32);
printf("%.f\t%3.5f\n",faren, celsius);
}
}
【问题讨论】:
-
我们应该在视频中期待什么,你能在问题中写下这个吗? IDE 的屏幕截图如何与问题相关,您能否在问题中添加所有必要的信息?输入空格字符以在代码列表中创建空格可能会有所帮助。
-
printf或您的控制台内部可能存在一些谜团。尝试在阈值以下和以上的部分使用perf record,看看您的时间是否花在不同的地方。 -
您可以发布相关代码的程序集吗?另外,您是否也在测量
printf的执行时间?printf执行时间是否在执行 3999999 次后增加,而 celsuis 计算执行时间保持不变? -
“当循环即将结束时(不应该按照我的代码)”是什么意思?为什么循环不应该结束?
-
分而治之!仅使用计算和
printf重复测量。
标签: c performance execution