*restrict 功能

转载 2012年03月29日 08:38:20

    restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同样指向这个内存单元的其他指针都是未定义的,直白点就是无效指针。restrict 的出现是因为 C 语言本身固有的缺陷,C 程序员应当主动地规避这个缺陷,而编译器也会很配合地优化你的代码.

 

考虑下面的例子:
  int ar[10];
  int * restrict restar=(int *)malloc(10*sizeof(int));
  int *par=ar;
  这里说明restar是访问由malloc()分配的内存的唯一且初始的方式。par就不是了。
  那么:
  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,编译器就可以放心地进行优化了。
  这个关键字据说来源于古老的FORTRAN。有兴趣的看看这个。

C语言中关键字restrict的用法(linux 为 __restrict)

类型限定词restrict 关键字restrict通过允许编译器优化某几种代码增强了计算支持。它只可用于指针,并表明指针是访问一个数据对象的惟一且初始的方式。为了清楚这样做为何有用,我们需要看一些例...
  • ly0303521
  • ly0303521
  • 2015年09月02日 15:21
  • 6499

restrict关键字用法

c99中新增加了一个类型定义,就是restrict。
  • u010129119
  • u010129119
  • 2016年10月11日 16:59
  • 194

linux C编程(三)ANSI C中的类型限定词(const/volatile/restrict)

由第二节我们知道,一个变量有两种属性来描述,一种为数据类型(如int,char等),一种为存储属性(包括作用域,链接属性,生存周期 属性,由static和变量声明的地方决定)。C90标准增加了两个属性...
  • u012177034
  • u012177034
  • 2016年08月24日 22:40
  • 394

【C++复习向】三种操作文件的方法

如何在未知的文件中读取数据如果是完全未知的话可以用getchar 等读取字符串的函数直接将数据由字符串形式保存后再进行转化。 如果是已知数据类型但未知数据长度可以用while(scanf("%d",...
  • wtysos11
  • wtysos11
  • 2016年10月05日 09:17
  • 122

详说Angular之指令(directive)

时间 2016-01-25 20:58:00  博客园精华区 原文  http://www.cnblogs.com/CreateMyself/p/5153772.html 主题 AngularJS...
  • qq_31860607
  • qq_31860607
  • 2016年04月01日 17:37
  • 400

介绍oracle的restrict状态

在Oracle启动时,有三种状态可以选择:restrict,force,EXCLUSIVE.这篇文章,介绍一下关于restrict状态。  1. startup restrict:     约束方...
  • techsupporter
  • techsupporter
  • 2016年08月22日 22:46
  • 769

C 语言restrict 关键字的使用浅谈

C99中新增加了restrict修饰的指针: 由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法, 仅当第二个指针基于第一个时,才能对对象进行存取。 对对象的存取都限定于...
  • u010781856
  • u010781856
  • 2015年05月13日 15:07
  • 323

NTP 排错 原理 及 其他

前面是考别人的,后面是自己的。 1.Server dropped: Strata too high ntp客户端运行ntpdate serverIP,出现no server suitable fo...
  • zrbcool
  • zrbcool
  • 2015年01月14日 17:10
  • 3473

CentOS下NTP安装配置

安装 yum install ntp 配置文件 /etc/ntp.conf restrict default kod nomodify notrap nopeer noquery restrict ...
  • exileme
  • exileme
  • 2017年05月22日 13:36
  • 165

关键字Restrict

restrict是c99引入的,关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(baseon)该指针的,即不存在其它进行修改操作的途径...
  • hjx_1000
  • hjx_1000
  • 2013年03月07日 09:27
  • 838
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:*restrict 功能
举报原因:
原因补充:

(最多只允许输入30个字)