编码习惯
程序员文章站
2022-04-27 18:43:55
...
判断语句
if语句 判断变量是否等于某个立即数,如下:
if (p == NULL) //判断指针p是否为空
if (a == 1) //判断变量a是否等于1
- 以上写法,有时可能会将"==“写成”=",编译器不能帮助程序员发现问题,为了防止这种异常,建议按照如下方式书写
if (NULL == p)
if (1 == a)
- 当书写错误将"==“写成”=",由于立即数在前面,立即数是不能赋值的,编译器能发现书写错误。
if语句或者switch语句,将出现概率高的放前面,如下:
* if 语句
if (1 == a){
} else if (2 == a){
} else if (3 == a){
}
* switch 语句
switch(a){
case 1:
...;
break;
case 2:
....;
break;
case 3:
....;
break;
default:
....;
break;
}
- 如果将出现概率高的放在前面,if语句可以少执行几个判断,而switch语句跳转偏移也会小很多,执行次数一多,效率提升也会很明显。
内存使用
小内存分配
- C/C++编程时,时常出现以下代码:
void Demo(){
char *a = malloc(sizeof(char)*5);
.....
free(a);
}
- 以上写法,在堆上分配内存,程序运行不会出错,但是:
- 堆内存分配较为麻烦,需要在红黑树上查找合适大小空间,相对栈上内存分配(由系统管理,分配时直接更改寄存器值)分配和释放速度慢很多。
- 在堆上分配太小的内存空间,容易造成内存碎片问题,而栈上分配不会,虽然操作系统可以进行碎片整理,但是需要占用一定cpu资源。
- 在堆上分配内存容易造成内存泄露,而栈由系统管理不会出现该问题。
- 总结:小内存分配,如果数据不需要保存,可以直接在栈上分配,不要在堆上分配
大内存分配
- C/C++编程时,时常出现以下代码:
void Demo(){
unsigned char a[10*1024*1024];
.....
}
- 以上写法,在栈上分配内存,程序运行可能不会出错,但是:
- 每个线程的栈空间大小默认只有1M,在栈上分配大量内存,容易造成栈空间溢出(栈空间大小固定,使用超出空间范围),导致数据错乱。
- 总结:大内存使用,在堆上分配,不要在栈上分配