openKylin论坛

 找回密码

restrict关键字? [复制链接]

int pthread_mutex_init(pthread_mutex_t *restrict mutex,
              const pthread_mutexattr_t *restrict attr);

这是linux man手册上看到的函数声明,这里的restrict甚是费解,哪位大神讲解一下这是什么用法?表示什么?自己搜了一下,说是“c99关键字,该关键字适用于指针的声明,并表明指针是访问一个数据对象的唯一且初始的方式,由此编译器可以进行一些优化”。还给了若干例子,摘抄一个如下:
  1. int ar[10];
  2. int * restrict restar=(int *)malloc(10*sizeof(int));
  3. int *par=ar;
  4. for(n=0;n<10;n++)
  5. {
  6.    par[n]+=5;
  7.    restar[n]+=5;
  8.    ar[n]*=2;
  9.    par[n]+=3;
  10.    restar[n]+=3;
  11. }
复制代码
因为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(10*sizeof(int));之后又定义一个int* ptr = restar;那后面还会不会优化?
楼主
发表于 2013-5-12 22:23:22
回复

使用道具 举报

openKylin

GMT+8, 2024-5-17 12:21 , Processed in 0.018239 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表