• 提高C/C++运行效率以及避免出现Bug的20种方法


    这是在工作和学习中总结的有关于提高C/C++运行效率以及避免出现Bug的几种常见的实用方法,当然还有许多更有效的方式有待进一步的探索。

    1.若可以替代的话,尽可能使用前缀操作符代替后缀操作符,如利用++i来代替i++,因为后缀操作符会产生一个临时变量,并且涉及到复杂的拷贝复制等。

    2.对于乘法操作尽可能的利用位运算,如b= a * 16可以改写为b = a << 4,因为位操作的效率要比乘法以及除法的效率高。

    3.一个很好的交换两个数的方法:a = a^b; b =a^b; a = a^b;既可以将变量a与变量b进行交换,即消除了交换变量值时所用的临时变量,同时提高了效率。

    4.在for循环中for(int i = 0; i != 100; ++i)尽可能的使用 !=号而不是 <号,除非必须使用 <才不用 !=。

    5.在C++中变量初始化的时候尽量使用int i(0);而不是int i = 0;的方式来给变量初始化。

    6.使用memset(),memcpy(),memcmp()来代替strcpy(),strcmp()等函数。

    7.使用snprintf()来代替sprintf()函数,永远也不要用sprintf()函数。

    8.使用fgets()函数来代替gets()函数,放置输入的字符串太长而引起内存泄露。

    9.所有定义的*.h的头文件都必要加上#ifndef #define …. #endif这样的结构,从而避免头文件被重复引用,而造成程序出错。

    10.定义结构体时,通常在前面加上typedef形成typedef struct{ } std;这样的结构。这样给结构体起个别名,使结构体更加清晰。

    11.所有的常数都应该用宏定义,如 #define OK 1这样的方式,而不是直接使用1,从而防止“魔数”的发生,而switch…case语句则采用enum{ }; 来避免“魔数”。

    12.合理的使用register以及 inline函数对程序进行优化,对于不发生变化的常量一定要加const关键字,从而避免常量被修改。

    13.对于那些只需要做一次计算的操作,要提到循环的外面进行操作,从而避免每次循环都进行一次不必要的计算。如for(inti = 0; i != strlen(a); ++i);中的strlen(a)要提到for循环的外面。即int Len = strlen(a); for(int i = 0; i != Len; ++i);这样stelen(a)仅运行了一次。

    14.对于变量定义的位置问题,尽量要做到“直到非定义不可的时候才定义”这样可以有效的减小该变量占用内存的时间,同时也可以避免定义的变量最后没有用到的现象。

    15.for循环嵌套循环等,要尽可能的将次数多的循环放置最内层,次数少的循环放在最外层,这样可以减少计算机进行“切换”,从而提高运行的效率。

    16.对于条件判断如if…else语句以及switch…case语句等要将可能性大的操作放在前面,这样可以减小计算机对程序进行逐次判断的概率,可以及时的命中操作,从而可以提高效率。

    17.对于矩阵相乘运算,尽可能的不要使用我们通常采用的方式,即行*列,而是采用依次相乘然后累加的策略,从而避免内存的未命中的情况。

    18.在调用free()函数释放指针的时候要将指针变量指为空,即free(p); p =NULL;从而防止指针成为野指针。

    19.对于sizeof()操作符,对操作变量并没有改变,即int i = 10;sizeof(++i);运行完毕后i的值仍然为10而不是11。

    20.对于&&以及||表达式来说,其满足最优原则,即如( f1() == f2() ) && ( f3() == f4() )若第一个表达式为假的话就不会运行第二个表达式,同理对于||操作符来说,若第一个表达式为真,则不会运行第二个表达式。

  • 相关阅读:
    awk
    tac
    cat
    less
    more
    head
    vim
    linux安装redis
    Redis for Python开发手册
    Python3.x标准模块库目录
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/16494138.html
Copyright © 2020-2023  润新知