#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;
}
我试图用较少的执行时间递减一个大的整数值,以实现我用这个声明一个带有寄存器关键字的变量,例如注册unsigned int value 我还没有收到任何优化结果使用/不使用此register关键字运行此程序。如果我错了,请纠正我。并且如果我们有任何其他方法以最少的执行时间减少更大的数字,请分享。
这里提到的程序只是用例如register关键字(减少执行时间的优化方法之一)这个问题的主要议程是如何以最小的执行时间递减更大的数字。
答案 0 :(得分:1)
如果没有理解逻辑告诉我decrement(x)
应该总是为零,那么还有另一个问题:
value = value--;
正在调用未定义的行为,因为value--
是具有副作用的后递减操作。您需要value--;
或value -=1
。但不是两个。
答案 1 :(得分:0)
当您调用decrement
函数时,value
将按值传入。这意味着您在value
函数中修改的decrement
不是与register
关键字关联的register
。您需要在Document
变量定义的相同函数中递减。
即便如此,我怀疑这是否是你真正需要做的事情。对我来说,这似乎是一个过早优化的经典案例。
答案 2 :(得分:0)
register
通常被编译器忽略......无论如何,如果某些内容应该被限定register
,则value
函数的变量decrement
不是value
} main
。如果你想加速,为什么在if
循环中插入for
?您可以将代码重写为:
unsigned int decrement(register unsigned int value)
{
for(;value;value--)
{
printf("loop value %u\n",value);
}
return 0;
}
编写稍好的代码并让编译器优化...
答案 3 :(得分:0)
我会修改这样的减量功能:
join respostaComentListaDef in db.RespostaComentListaDef
on new { comentListaDef.Id, IdAutor = 1072 } equals
new { Id = respostaComentListaDef.IdComentListaDef, respostaComentListaDef.IdAutor }
}
当你需要我只是&gt;你不需要说i&gt; = 0 0(当i == 0时看看是否有中断),你甚至不需要&#34; i&#34;只需使用变量值进行操作,因为那是你想要返回的内容(这是我从你的代码中理解的内容)抱歉我的英文不好!
答案 4 :(得分:0)
对不起我的格式,因为我是新来的。
请将value = value--
更改为--value
除非您以明确的方式/语句使用它,否则后增量运算符通常比预增量运算符慢。同样适用于减量。
此外,您无需对i>=0
进行明确检查
试试这个:
unsigned int decrement(register unsigned int value)
{
while(value>=0)
printf("loop value %u\n",value--);
return 0;
}