1、 在用除法的是时候,不要使用“/”
例如:
int n = 8;
析构方法n = n/2;
中方式,建议使用
int n = 8;
n = n>>2;
2、 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数:
例如:
for (row=0; row<100; row++) { for ( col=0; col<5; col++ ) { sum = sum + a[row][col]; } } | for (col=0; col<5; col++ ) { for (row=0; row<100; row++) { sum = sum + a[row][col]; } } |
示例4-4(a) 低效率:长循环在最外层 示例4-4(b) 高效率:长循环在最内层
3、 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
例如:
for (i=0; i<N; i++) { if (condition) DoSomething(); else DoOtherthing(); } | if (condition) { for (i=0; i<N; i++) DoSomething(); } else { for (i=0; i<N; i++) DoOtherthing(); } |
表4-4(c) 效率低但程序简洁 表4-4(d) 效率高但程序不简洁
4、 常用调用的函数可以使用inline关键字。inline主要是为了减少函数调用的开销,而用相应的代码代替函数调用。inline函数必须是相对比较简单的代码,要不然反而会大大增加程序长度这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。
5、 如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
6、 以空间换时间。例如:字符串的赋值。
方法 A,通常的办法: #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is an example!!" | 方法 B: const char string2[LEN]="This is an char*cp; cp=string2; (使用的时候可以直接用指针来操作。) |
从上面的例子可以看出,A和 B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而 A 需要调用两个字符函数才能完成。B的缺点在于灵活性没有 A好。在需要频繁更改一个字符串内容的时候,A 具有更好的灵活性;如果采用方法 B,则需要预存许多字符串,虽然占用了。使用一个变量,如果知道它的内存地址,用地址来操作比较快。
7、
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论