欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编码习惯

程序员文章站 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);
}
  • 以上写法,在堆上分配内存,程序运行不会出错,但是:
  1. 堆内存分配较为麻烦,需要在红黑树上查找合适大小空间,相对栈上内存分配(由系统管理,分配时直接更改寄存器值)分配和释放速度慢很多。
  2. 在堆上分配太小的内存空间,容易造成内存碎片问题,而栈上分配不会,虽然操作系统可以进行碎片整理,但是需要占用一定cpu资源。
  3. 在堆上分配内存容易造成内存泄露,而栈由系统管理不会出现该问题。
  • 总结:小内存分配,如果数据不需要保存,可以直接在栈上分配,不要在堆上分配

大内存分配

  • C/C++编程时,时常出现以下代码:
void Demo(){
    unsigned char a[10*1024*1024];
    .....
}
  • 以上写法,在栈上分配内存,程序运行可能不会出错,但是:
  1. 每个线程的栈空间大小默认只有1M,在栈上分配大量内存,容易造成栈空间溢出(栈空间大小固定,使用超出空间范围),导致数据错乱。
  • 总结:大内存使用,在堆上分配,不要在栈上分配
相关标签: # 代码风格