5/17/2007 3:03:57 PM
1 使用循环展开,对于循环内部只有一条语句可以采用循环展开来提升速度.
2 对于2的倍数除法使用&运算,如 30 除 4 的余数为 30 & 3,30 类最大的4的倍数为30 & ~3.一个数是否为2的幂 n & 1. 而判断一个变量中含有多少个1可以
3 对于一些只需要初始化一次的函数内部变量可以声明为static类型
4 对于过大的switch语句块,可以采用表驱动法,对于switch如果条件过多,后面的条件分支必须等待前面判断完毕才能执行。而采用表驱动可以直接跳转到要执行的语句.虽然vc release也会建表,但毕竟不是很智能
2 对于2的倍数除法使用&运算,如 30 除 4 的余数为 30 & 3,30 类最大的4的倍数为30 & ~3.一个数是否为2的幂 n & 1. 而判断一个变量中含有多少个1可以
3 对于一些只需要初始化一次的函数内部变量可以声明为static类型
4 对于过大的switch语句块,可以采用表驱动法,对于switch如果条件过多,后面的条件分支必须等待前面判断完毕才能执行。而采用表驱动可以直接跳转到要执行的语句.虽然vc release也会建表,但毕竟不是很智能
5 ^= 异或操作,切换某位状态由0到1,或者由1到0. A ^= 0x00010 ,迅速切换第2位 . 这样比 true ,false 之类的切换要快。写法也简单
6 ! 操作,如 strcmp 判断两个字符相等返回0,而不是 true ,而0值确对应 false. 和0比较相对于其他比较要快些。所以 if(!strcmp(a,b)),注意: ! 对于大于 0 的数返回 0,!0 怎返回 1
7 ~= 判断1个dword 变量x有多少个位为1。 int c=0; for(;x~= x-1;c++); 最后c 为 x 含有1 的个数。
8 对于迭代器。for 语句中使用++iter , 而不是 iter++。