*restrict 功能
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 功能相关推荐
- android魅族轮播图,用angularjs模仿魅族官网的图片轮播功能
使用指令模仿魅族官网的图片轮播功能(angularjs中DOM操作都在指令中完成) html css .slider{ position: relative; width:900px; height: ...
- OO实现ALV TABLE 八:ALV的布局功能
在ALV的输出结果中,我们可以利用ALV提供的标准功能(过滤,排序,汇总)对输出结果正行操作.比如说我们对一个结果进行了排序和过滤等的动作,下次再运行这个报表的时候可以选择一个功能直接运行这些动作.这 ...
- 网件使用计算机mac地址吗,找回网件R7000消失的无线MAC过滤功能
本帖最后由 zyyjcj 于 2015-2-27 20:13 编辑 想必大家R7000到手后都发现没有无线MAC过滤功能,对于平时不加密或作为AP的人来说很不方便,其实这个功能只是被隐藏了而已. 游览 ...
- pandas内置绘图_使用Pandas内置功能探索数据集
pandas内置绘图 Each and every data scientist is using the very famous libraries for data manipulation th ...
- 安卓应用安全指南 5.7 使用指纹认证功能
5.7 使用指纹认证功能 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 目 ...
- 【Jenkins】Jenkins配置从节点,实现远程主机调用功能
一.需求 使用Jenkins进行持续集成部署过程中,需要用到远端主机的处理功能.如部署到远程主机.文件备份等功能 二.思路 1.当远端主机为Linux系统时使用Publish Over SSH Plu ...
- Android 5.0 Screen pinning 屏幕固定功能
2019独角兽企业重金招聘Python工程师标准>>> 2015.03.13更新 恩 前几天看到android 5.1 出来了,Screen pinning这一部分有改动,具体改了什 ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- SQL Server 2019中的图形数据库功能–第1部分
SQL Server 2017 introduced Graph database features where we can represent the complex relationship o ...
最新文章
- 在Win 2003中配置ASP.net环境
- 教你一招“恶意修改主页”的处理办法
- opencv 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
- 视易精通收银服务器自动关机,视易精通量贩式收银系统操作-手册3.0.doc
- 持续集成:部署发布篇
- game connect4 java_为我的connect 4数学游戏创建一个积分系统
- 会议交流 | 知识图谱前沿技术与热门应用
- sql增删改查_面试速记之数据库增删改查|附思维导图
- 20春计算机应用基础在线作业,19春学期《计算机应用基础》在线作业21.txt
- ViT (Vision Transformer) ---- Vision Transformer
- 力扣——查找常用字符
- SIYI AK28 遥控器接收机的SBUS口与STM32通讯
- ArangoDB教程(二)-AQL语句使用,图使用,结合WEB界面端
- AVX贴片钽电容标识
- Python量化投资——年化收益26%,一个大小盘轮轮动量化投资策略的回测效果
- applet java_Java—Applet
- 由Tomcat 8005端口想到的...
- Eclipse:解决Eclipse看不了java的源码
- PyQt5最全73 布局之addStretch设置布局的伸缩量
- html调整上下的间距,html上下间距怎么调
热门文章
- Unity中Destory()、DestoryImmediate()和GameObject==null问题
- Jimu310 数据同步
- 频谱仪原理与重要指标的作用
- 苹果cms V10添加修改播放器教程
- GAMS中fx的位置 固定变量数值
- Rasa 3.x 学习系列-Rasa 3.2.0 新版本发布
- 【点云处理之论文狂读经典版9】—— Pointwise Convolutional Neural Networks
- 安装RVM(ruby版本控制)
- 3DMax指定面贴图
- 我靠,在网站上出现中文的乱码竟然这样解决的