c程序以最小的执行时间递减大量数字

时间:2015-07-13 15:33:38

标签: c gcc

#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关键字(减少执行时间的优化方法之一)这个问题的主要议程是如何以最小的执行时间递减更大的数字。

5 个答案:

答案 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;
}