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。有兴趣的看看这个。

*restrict 功能相关推荐

  1. android魅族轮播图,用angularjs模仿魅族官网的图片轮播功能

    使用指令模仿魅族官网的图片轮播功能(angularjs中DOM操作都在指令中完成) html css .slider{ position: relative; width:900px; height: ...

  2. OO实现ALV TABLE 八:ALV的布局功能

    在ALV的输出结果中,我们可以利用ALV提供的标准功能(过滤,排序,汇总)对输出结果正行操作.比如说我们对一个结果进行了排序和过滤等的动作,下次再运行这个报表的时候可以选择一个功能直接运行这些动作.这 ...

  3. 网件使用计算机mac地址吗,找回网件R7000消失的无线MAC过滤功能

    本帖最后由 zyyjcj 于 2015-2-27 20:13 编辑 想必大家R7000到手后都发现没有无线MAC过滤功能,对于平时不加密或作为AP的人来说很不方便,其实这个功能只是被隐藏了而已. 游览 ...

  4. pandas内置绘图_使用Pandas内置功能探索数据集

    pandas内置绘图 Each and every data scientist is using the very famous libraries for data manipulation th ...

  5. 安卓应用安全指南 5.7 使用指纹认证功能

    5.7 使用指纹认证功能 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 目 ...

  6. 【Jenkins】Jenkins配置从节点,实现远程主机调用功能

    一.需求 使用Jenkins进行持续集成部署过程中,需要用到远端主机的处理功能.如部署到远程主机.文件备份等功能 二.思路 1.当远端主机为Linux系统时使用Publish Over SSH Plu ...

  7. Android 5.0 Screen pinning 屏幕固定功能

    2019独角兽企业重金招聘Python工程师标准>>> 2015.03.13更新 恩 前几天看到android 5.1 出来了,Screen pinning这一部分有改动,具体改了什 ...

  8. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  9. SQL Server 2019中的图形数据库功能–第1部分

    SQL Server 2017 introduced Graph database features where we can represent the complex relationship o ...

最新文章

  1. 在Win 2003中配置ASP.net环境
  2. 教你一招“恶意修改主页”的处理办法
  3. opencv 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
  4. 视易精通收银服务器自动关机,视易精通量贩式收银系统操作-手册3.0.doc
  5. 持续集成:部署发布篇
  6. game connect4 java_为我的connect 4数学游戏创建一个积分系统
  7. 会议交流 | 知识图谱前沿技术与热门应用
  8. sql增删改查_面试速记之数据库增删改查|附思维导图
  9. 20春计算机应用基础在线作业,19春学期《计算机应用基础》在线作业21.txt
  10. ViT (Vision Transformer) ---- Vision Transformer
  11. 力扣——查找常用字符
  12. SIYI AK28 遥控器接收机的SBUS口与STM32通讯
  13. ArangoDB教程(二)-AQL语句使用,图使用,结合WEB界面端
  14. AVX贴片钽电容标识
  15. Python量化投资——年化收益26%,一个大小盘轮轮动量化投资策略的回测效果
  16. applet java_Java—Applet
  17. 由Tomcat 8005端口想到的...
  18. Eclipse:解决Eclipse看不了java的源码
  19. PyQt5最全73 布局之addStretch设置布局的伸缩量
  20. html调整上下的间距,html上下间距怎么调

热门文章

  1. Unity中Destory()、DestoryImmediate()和GameObject==null问题
  2. Jimu310 数据同步
  3. 频谱仪原理与重要指标的作用
  4. 苹果cms V10添加修改播放器教程
  5. GAMS中fx的位置 固定变量数值
  6. Rasa 3.x 学习系列-Rasa 3.2.0 新版本发布
  7. 【点云处理之论文狂读经典版9】—— Pointwise Convolutional Neural Networks
  8. 安装RVM(ruby版本控制)
  9. 3DMax指定面贴图
  10. 我靠,在网站上出现中文的乱码竟然这样解决的