高效使用C/C++变量

来源:互联网 发布:bootstrap less源码 编辑:程序博客网 时间:2024/05/21 06:28
 

高效使用C/C++变量

1、  由于变量类型而引效率问题

在加法、减法以及乘法运算中,对整型的操作效率明显高于针对浮点型和双精度类型的操作效率,因此,在循环中运用整型运算代替浮点型和双精度类型,将会提高程序的效率。

例子:

双精度类型运算:

double s = 2.5;

for(int i = 0; i < 100; i++)

{

s *= 3;

}

转化为整型后的运算:

       int s1 = 25;

       double s2;

       for(int i = 0; i < 100; i++)

       {

              s1 *= 3;

       }

       s2 = s1/10.0;

2、  由于重复定义和释放变量而引起的效率问题

定义和释放变量同样需要引起开销,尤其在循环中重复的定义和释放变量将影响程序的内存和性能。因此,将循环中重复定义和释放的变量移到循环的外面,将会提高程序的效率。

变量定义在循环体内部:

for(int i = 0; i < 100; i++)

{

        int k = 0;

        if(a[i] > a[i+1])

        {

               k = a[i];

               a[i] = a[i+1];

               a[i+1] = k;

        }

}

变量定义在循环体外部:

int k = 0;

for(int i = 0; i < 100; i++)

{

        if(a[i] > a[i+1])

        {

               k = a[i];

               a[i] = a[i+1];

               a[i+1] = k;

        }

}

3、  由于重复调用函数而引起的效率问题

调用函数将造成较大的开销,在循环中重复调用同一个函数将造成较大的浪费,因此,创建局部变量,在循环体外一次调用函数并赋值给局部变量,在循环体内重复使用局部变量,将提高程序效率.

循环体内重复调用函数:

int ArraySum(Array myArray)

       {

              int s = 0;

              for(int i = 0; i < myArray.Size(); i++)

              {

                     s += myArray[i];

              }

              return s;

       }

循环体外调用函数:

       int ArraySum(Array myArray)

       {

              int s = 0;

              int k = myArray.Size();

              for(int i = 0; i < k; i++)

              {

                     s += myArray[i];

              }

              return s;

       }

4、  由于重复使用成员变量而引起的效率问题

因为要使用this指针获取成员变量的基地址,故存取成员变量的时间一般是存取局部变量的二倍;因而,可以创建局部变量,在循环体外一次赋值,循环体内重复使用,将提高程序效率。

class Array

{

        int size;

        int array[100];

};

重复使用成员变量:

int Array::Sum()

{

        int s = 0;

        for(int i = 0; i < size; i++)

        {

               s += array[i];

        }

        return s;

}

使用局部变量代替成员变量:

int Array::Sum()

{

        int s = 0;

        int k = size;

        for(int i = 0; i < k; i++)

        {

               s += array[i];

        }

        return s;

}