
C/C++性能优化
文章平均质量分 71
yk__peng
用心生活。。。
展开
-
a&b得到的究竟是什么
当你第一次看到(a&b) + ((a^b)>>1)=(a+b)/2,能立即意会到吗。(共有部分+加不同部分的和的一半)这就好比问80,100的平均值是多少,可以这样算(80+100)/2,也可以这样算80+(100-80)/2,还可以50+((80-50)+(100-50))/2,后2种算法,更通用点的表示为(80-x)+((80-x)+(100-x))/2。那么a&b究竟得到的是什么?会原创 2014-02-17 10:12:22 · 3742 阅读 · 0 评论 -
避开浮点数——伪浮点数
对于定点处理器来说,浮点数学运算的代价是非常巨大的(大多数嵌入式应用都是定点处理器)。相对于整数数学运算,浮点数学运算慢的要死。每个操作都会调用某个库来实现相应的函数,而这个库通常相当大。即使所使用的浮点数学非常简单,应用程序的大小也是非常惊人的。(标准的输入输出函数(例如printf和iostream)通常包含浮点处理。即使代码中没有使用浮点,但如果使用了这些函数,那么代码还是会包含浮点算术...原创 2014-02-17 10:14:39 · 3419 阅读 · 1 评论 -
反转字节中的位
使用有限的内存操作完成字节中的位反转。完成后,修改代码让它运行得尽可能快(但没有内存限制) 优化和正确性相比,总是居于次要位置。uint8_t SwapBitsInByte(uint8_t input){uint8_t output=0;for(uint8_t i=0; i{if(input & (1 Output |= 1 }}原创 2014-02-17 10:18:10 · 1887 阅读 · 0 评论 -
尾递归消除
以求4!为例基本递归:int fact(int n){ if(n<0) return 0; else if(n==0) return 1; else if(n==1) return 1; else return n*fact(n-1); } 栈帧原创 2014-02-17 10:34:45 · 3441 阅读 · 0 评论