博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言restrict限定符
阅读量:5233 次
发布时间:2019-06-14

本文共 800 字,大约阅读时间需要 2 分钟。

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

例子1:

int func(int *x, int *y){  *x = 0;  *y = 1;  return *x;}//这种情况情况下,对*的赋值可能影响*x,因为x,y可能指向同一地址,所以编译器不会进行代码优化

 

int func(int * restrict x, int * restrict y){  *x = 0;  *y = 1;  return *x;}//编译器可以根据限定符确定*y赋值不会影响到*x,所以可以将上述代码的返回语句优化成return 0;

 

例子2:

//限定符告诉编译器两个缓冲区互不影响,没有重叠部分,可以直接将元缓冲区内容复制到目标缓冲区void * memcpy(void * restrict s1, const void * restrict s2, size_t n);//缓冲区可能有重叠部分,则需要先复制到一个临时缓冲区,再复制到目标缓冲区void * memmove(void * s1, const void * s2, size_t n);

 

 

转载于:https://www.cnblogs.com/wanpengcoder/p/5332888.html

你可能感兴趣的文章
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>