少分配内存,少计算数据,哪种更好
第一种
- 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项目,内存有限。
[解决办法]
[解决办法]
根据实际需求。
[解决办法]
以真机为准
[解决办法]
楼主,别钻牛角尖了。一个人不可能写出来一个程序就是100%最优化的。一般来讲需要经过多个阶段的修改优化过程。很可能第一个没优化的版本已经卖出去了。
对于现实中project如何取舍的问题,真的要看程序瓶颈在哪里。
如果在一个while(运行1000000000)次里,修改掉一个运行指令就能让整个程序效率提高20%,那当然运算时间比资源重要。相反也是一样。
但是如果在一个只运行一遍的程序里面,不管你修改掉一个指令还是节省一个资源对整个项目的影响只有0.0000001%,那不管怎么改基本都是无意义的。
[解决办法]
一般来说,效率优先,毕竟一般情况下内存是足够用的
不过如果是嵌入式系统则需要仔细评估一下两者的区别,
单以你的例子而言,是少计算数据要好,只多一个临时变量却少做31次循环显然是值得的
[解决办法]
时间换取空间,空间换取时间,具体问题具体分析!
[解决办法]
这个东西看你需要的是更快还是什么?
影响效率的地方都在很关键的一部分。