首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

少分配内存,少计算数据,哪种更好解决办法

2012-04-07 
少分配内存,少计算数据,哪种更好第一种C/C++ code#include stdio.hint wordlength()int rightrot(unsig

少分配内存,少计算数据,哪种更好
第一种

C/C++ code
#include <stdio.h>int wordlength();int rightrot(unsigned x, int n);int main(){    unsigned x;    int n, a;    x = 32769;    n = 7;    a = rightrot(x, n);    printf("a = %d\n", a);    return 0;}int wordlength(){    unsigned v;    int i;    v = (unsigned)~0;    for (i = 1; (v=v>>1) > 0; ++i)    {        ;    }    return i;}int rightrot(unsigned x, int n){    unsigned rbits;        if ((n = n%wordlength()) > 0)    {        rbits = x & ~(~0<<n);        rbits = rbits << (wordlength()-n);        x = x >> n;        x = x | rbits;    }    return x;}


第二种
C/C++ code
#include <stdio.h>int wordlength();int rightrot(unsigned x, int n);int main(){    unsigned x;    int n, a;    x = 32769;    n = 7;    a = rightrot(x, n);    printf("a = %d\n", a);    return 0;}int wordlength(){    unsigned v;    int i;    v = (unsigned)~0;    for (i = 1; (v=v>>1) > 0; ++i)    {        ;    }    return i;}int rightrot(unsigned x, int n){    unsigned rbits;    int wl;    wl = wordlength();        if ((n = n%wl) > 0)    {        rbits = x & ~(~0<<n);        rbits = rbits << (wl-n);        x = x >> n;        x = x | rbits;    }    return x;}



第一种多计算了一次 wordlength(),一般计算机字长都是32位的,所以这个要循环31次

第二种多分配了一个变量,但是少计算了一次 wordlength()

请问哪种方式更好?
虽然这是个小程序,那以后遇到做项目的时候该如何取舍?

[解决办法]
还有,在学习算法之前,研究效率是个学习误区。
[解决办法]
等做到实际项目时,再决定如何取舍。
不同的项目,要求不一样。可能在A项目里,内存不是问题,要求快速。而B项目,内存有限。
[解决办法]
探讨

等做到实际项目时,再决定如何取舍。
不同的项目,要求不一样。可能在A项目里,内存不是问题,要求快速。而B项目,内存有限。

[解决办法]
根据实际需求。
[解决办法]
以真机为准
[解决办法]
楼主,别钻牛角尖了。一个人不可能写出来一个程序就是100%最优化的。一般来讲需要经过多个阶段的修改优化过程。很可能第一个没优化的版本已经卖出去了。

对于现实中project如何取舍的问题,真的要看程序瓶颈在哪里。

如果在一个while(运行1000000000)次里,修改掉一个运行指令就能让整个程序效率提高20%,那当然运算时间比资源重要。相反也是一样。

但是如果在一个只运行一遍的程序里面,不管你修改掉一个指令还是节省一个资源对整个项目的影响只有0.0000001%,那不管怎么改基本都是无意义的。
[解决办法]
一般来说,效率优先,毕竟一般情况下内存是足够用的
不过如果是嵌入式系统则需要仔细评估一下两者的区别,
单以你的例子而言,是少计算数据要好,只多一个临时变量却少做31次循环显然是值得的
[解决办法]
时间换取空间,空间换取时间,具体问题具体分析!
[解决办法]
这个东西看你需要的是更快还是什么?
影响效率的地方都在很关键的一部分。

热点排行