C/C++学习笔记(一)
2016-01-19 19:58
309 查看
一、C++层次代码的优化:
1、无符号类型应用于:除法和余数,循环计算,数组下标; 带符号类型应用于:整型到浮点的转化。
2、while与for的比较:for比while编译后指令少,不占用编译器且无需跳转。
3、数组与指针:指针能访问任意位置,当不必要访问时用数组可优化代码,提高稳定性。
4、小循环完全展开。
5、避免没必要的读写依赖。(引入临时变量)
7、确定浮点型变量及表达式是float型,默认情况是double型,只有声明后才是float型。(如:3.14f)
8、switch的用法:推荐按case值发生的可能性进行排序,最有可能的放在第一个。另外在case中推荐使用小的连续整数。
9、所有函数都应该有原型定义。
10、尽可能使用常量(const)。可提高代码的效率。
11、把本地函数声明为静态(static)。如果一个函数在实现他的文件外未被使用的话,应将他声明为静态。
12、动态内存分配。
13、使用显示的并行代码,尽可能把长的有依赖的串行代码写成可以再流水线单元中并行执行的代码。如下:
double a[100],sum;
int i;
sum=0.0f;
for(i=0;i<100;i++){ sum+=a[i];}
可写成:
double a[100],sum1,sum2,sum3,sum4,sum;
int i;
sum1=sum2=sum3=sum4=0.0;
for(i=0;i<100;i+=4)
{
sum1+=a[i]; sum2+=a[i+1]; sum3+=a[i+2]; sum4+=a[i+3];
}
sum=(sum1+sum2)+(sum3+sum4); //流水线并行执行
14、提出公共子表达式。
15、结构体成员的布局。成员对齐,是指结构体成员要与存储器的单元对齐,如64位的系统,若原结构体总长度为17,会自动填充为24,浪费了空间,所以要是结构体成员合理排序。
16、避免不必要的整数除法。整数除法是整数运算中最慢的,所以应该尽可能避免。避免连除,以乘法代替。
17、把频繁使用的指针型参数拷贝到本地变量。指针难以优化。
18、赋值与初始化。尽量在需要使用一个对象时才声明,并用初始化方法赋初值。
1、无符号类型应用于:除法和余数,循环计算,数组下标; 带符号类型应用于:整型到浮点的转化。
2、while与for的比较:for比while编译后指令少,不占用编译器且无需跳转。
3、数组与指针:指针能访问任意位置,当不必要访问时用数组可优化代码,提高稳定性。
4、小循环完全展开。
5、避免没必要的读写依赖。(引入临时变量)
7、确定浮点型变量及表达式是float型,默认情况是double型,只有声明后才是float型。(如:3.14f)
8、switch的用法:推荐按case值发生的可能性进行排序,最有可能的放在第一个。另外在case中推荐使用小的连续整数。
9、所有函数都应该有原型定义。
10、尽可能使用常量(const)。可提高代码的效率。
11、把本地函数声明为静态(static)。如果一个函数在实现他的文件外未被使用的话,应将他声明为静态。
12、动态内存分配。
13、使用显示的并行代码,尽可能把长的有依赖的串行代码写成可以再流水线单元中并行执行的代码。如下:
double a[100],sum;
int i;
sum=0.0f;
for(i=0;i<100;i++){ sum+=a[i];}
可写成:
double a[100],sum1,sum2,sum3,sum4,sum;
int i;
sum1=sum2=sum3=sum4=0.0;
for(i=0;i<100;i+=4)
{
sum1+=a[i]; sum2+=a[i+1]; sum3+=a[i+2]; sum4+=a[i+3];
}
sum=(sum1+sum2)+(sum3+sum4); //流水线并行执行
14、提出公共子表达式。
15、结构体成员的布局。成员对齐,是指结构体成员要与存储器的单元对齐,如64位的系统,若原结构体总长度为17,会自动填充为24,浪费了空间,所以要是结构体成员合理排序。
16、避免不必要的整数除法。整数除法是整数运算中最慢的,所以应该尽可能避免。避免连除,以乘法代替。
17、把频繁使用的指针型参数拷贝到本地变量。指针难以优化。
18、赋值与初始化。尽量在需要使用一个对象时才声明,并用初始化方法赋初值。
相关文章推荐
- C语言运算中的数据类型自动转换原则
- C语言中的数据类型及其转换详解
- [土狗之路]Coursera C++第10周作业(上)
- c/c++变量学习总结
- C++ 学习笔记(一些新特性总结3)
- C++ 学习笔记(一些新特性总结3)
- C/C++函数指针声明
- C++学习之继承篇一(继承权限)
- 编译器对齐机制——由一道求C++类大小的题说开
- 解析C++中四种强制类型转换的区别详解
- C++相关的复习
- C++: std::string 与 Unicode 如何结合?
- 学习历程《C语言陷阱和缺陷》
- Rcpp简明入门
- 详解C++编程中一元运算符的重载
- C++设计模式——享元模式
- C++中#define、typedef和const的区别
- 详解在C++中显式默认设置的函数和已删除的函数的方法
- 类的组合和继承
- C++经典面试题