如果一个函数被频繁地调用很多很多次的时候,我们就应该从细节入手。有时候我们对代码本身的逻辑无从下手,往往这些细节能够带给我们意想不到的结果。类型修饰符就是其中之一。
const
关键词无需多说,但是我们往往也能忽视,所以尽量养成一个习惯:
在设计一个函数参数或者申明一个变量(无论是局部的还是全局的)的时候,下意识地考虑一下这个变量我们可不可以设计为不可更改的。
NOTE: 如果是指针的话,我们还应该考虑是指针指向的内容不可更改(应该申明为const int
*p
),还是指针本身不可修改(应该申明为int * const p
),或者二者均不可修改(应该申明为const
int * const p
)。
restrict
关键词,我在开始DSP平台优化之前从来没有接触过的,但是在最近的学习和优化过程中,它却好几次带给我意想不到的结果。
restrict,C语言中的一种类型限定符(Type Qualifiers),用于告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。——百度百科
类型修饰符的作用就是告诉编译器更多的关于变量的信息,这样编译器在做优化的时候就更能放开手脚,大胆地优化了,因为编译器总是会选择最安全的优化方案。但是,有时候我们也会看到,即使添加了这些类型修饰符但是效果却不明显,其实就是编译器已经替我们做了这件事。