int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
这是linux man手册上看到的函数声明,这里的restrict甚是费解,哪位大神讲解一下这是什么用法?表示什么?自己搜了一下,说是“c99关键字,该关键字适用于指针的声明,并表明指针是访问一个数据对象的唯一且初始的方式,由此编译器可以进行一些优化”。还给了若干例子,摘抄一个如下:
int ar[10];
int * restrict restar=(int *)malloc(10*sizeof(int));
int *par=ar;
for(n=0;n<10;n++)
{
par[n]+=5;
restar[n]+=5;
ar[n]*=2;
par[n]+=3;
restar[n]+=3;
}
因为restar是访问分配的内存的唯一且初始的方式,那么编译器可以将上述对restar的操作进行优化:
restar[n]+=8;
而par并不是访问数组ar的唯一方式,因此并不能进行下面的优化:
par[n]+=8;
因为在par[n]+=3前,ar[n]*=2进行了改变。使用了关键字restric,编译器就可以放心地进行优化了。
以上为http://www.cnblogs.com/visayafan/archive/2012/06/01/2529426.html原话,如果我使用int * restrict restar=(int )malloc(10sizeof(int));之后又定义一个int* ptr = restar;那后面还会不会优化?