【发布时间】:2015-07-13 15:33:37
【问题描述】:
#include <stdio.h>
#include <time.h>
unsigned int decrement(unsigned int value);
main()
{
clock_t start, end;
double cpu_time_used;
register unsigned int value;
value = 4294967;
start = clock();
decrement(value);
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("cpu_time_used %lf\n",cpu_time_used);
}
unsigned int decrement(register unsigned int value)
{
int i;
for(;value;value--)
{
printf("loop value %u\n",value);
}
return 0;
}
我试图以更少的执行时间减少一个大整数值,以实现我使用 register 关键字声明一个变量,如 register unsigned int value 从此我没有收到任何优化结果,而使用/不使用此注册关键字运行此程序。如果我错了,请纠正我。 如果我们有任何其他方法可以在最短的执行时间内减少更大的数字,请分享。
这里提到的程序只是以寄存器关键字为例(减少执行时间的优化方法之一)这个问题的主要议程是如何以最短的执行时间递减一个更大的数字。
【问题讨论】:
-
register修饰符只是一个建议,现在的编译器很少关心。 -
我不明白你要做什么,或者大量的相关性。你递减
i那么还需要递减value吗?为什么你有一个循环运行i>=0,但在i==0时导致break,在每次迭代中浪费执行时间? -
value = value--;完全没有意义(只需使用--value;)。并在您的循环中丢失printf,其中一次执行可能比整个循环更耗时(即您的测量几乎是所有 IO时间)。i==0的测试也毫无价值。如果修改为i>0,您已经在 for 循环条件中涵盖了这一点。 -
i=value;在value > INT_MAX时以大值失败。考虑使用一致的类型。 -
不要在问题中编辑您的代码。如果问题已解决,请接受答案或对您的问题发表评论。