1.restrict关键字:
理解为告诉编译器此块内存区域只有被restrict关键字修饰的指针是有效的,其他都是无效的,编译器会基于此进行优化。
通常用于修饰形参或新分配的对象。memcpy函数是此关键字应用的一个例子。注意S1与S2不能有重叠,否则这个操作可能正常操作也可能不正常工作,不可信了。所以使用这个函数之前确认二者是否有重叠,是我们应该注意的。
void * memcpy(void * restrict s1, const void * restrict s2, size_t n);
在代码中,如果两个指针(一个被修饰、一个没被修饰)指向的空间有部分重叠,只要没有用没被修饰过的指针去访问重叠区域,就不会出错。
2.inline内联函数:
什么时候用:替换函数式宏,因为函数式宏具有没有类型检查,没有独立作用域,技巧性强,可移植性不好等缺点,尽量用内联函数替换。
有啥优点:没有调用函数的栈内存消耗。省去了函数调用的开销,提升了执行效率,但也会导致代码膨胀,因为他在每个调用点都会展开,如果调用点特别多,膨胀得厉害也会造成效率降低。
怎么用:对于10行以内的小函数写成内联,内部不要有循环,switch或递归。尽量把定义放在头文件中,如果只在头文件中声明的话,其他.c文件调用,include你的头文件后调用并不会是调用内联。
如果一个.c文件调用的内联函数,在此.c文件中能看到内联函数定义,则为内联版本。如果看不到内联定义,则为非内联版本。
注意:inline关键字必须和函数定义放到一起才可以。这个内联主要