概念:

restrict,C语言中的一种类型限定符(Type Qualifiers),用于告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。

渊源:

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

使用场景:

非常需要性能。

需要改写指针的所指物。

明确知道某两个指针在业务逻辑上不会、也不能重叠

例子:

1 #include

2

3 int foo(int *a, int *b)4 {5 *a = 5;6 *b = 6;7 return *a + *b;8 }9

10 int rfoo(int *restrict a, int *restrict b)11 {12 *a = 5;13 *b = 6;14 return *a + *b;15 }16

17 intmain()18 {19 int i =0;20 int *a = &i;21 int *b = &i;22

23 printf("%d",foo(a,b));24 printf("%d", rfoo(a,b));25

26 }

在gcc 8.1 下的运行结果:

不过,我有一点是疑惑的,暂时没有想清楚,就是我在自己的ubuntu 16.04上编译,一直是不会运行出来11的结果,感觉是这个关键字没有起作用,网上查了一下没有查到原因,请知道答案的朋友解释一下,多谢.

参考文档:

c语言 u2_printf,C语言中关键字restrict的概念,使用范围,例子相关推荐

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

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

  2. C语言关键字restrict(linux 中为 “__restrict”)

    C语言关键字restrict(linux 中为 "__restrict") 关键字restrict只可用于指针,表明该指针是访问一个数据对象的惟一且初始的方式. 该关键字的作用是允 ...

  3. C语言的关键字restrict,C语言中restrict关键字学习

    简介:程序员 restrict是c99标准引入的,它只能够用于限定和约束指针,并代表指针是访问一个数据对象的惟一且初始的方式.即它告诉编译器,全部修改该指针所指向内存中内容的操做都必须经过该指针来修改 ...

  4. python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是

    Python 语言中用来定义函数的关键字是 答:def 调查问卷采集是数据采集人员通过设计具有针对性的问卷,采用方式进行信息采集 答:以上都是 中国大学MOOC: 突出重点,必须以解决问题为目标.也就 ...

  5. c语言中关键字static_了解C ++中Static关键字的变体

    c语言中关键字static Hello, folks! Today we will be unveiling another important aspect in the series of our ...

  6. c语言item变量,C++ 中的Item是什么关键字?可以定义什么型的变量?

    匿名用户 1级 2011-11-04 回答 NEW是C 的关键字,能进行类型的检查之类的 malloc是C跟C 都可以用的 不能进行类型检查之类 如果是在C 中,推荐使用new inline函数区别与 ...

  7. c语言 编译器关键字,C语言关键字 restrict

    restrict是c99标准引入的,它只可以用于限定和约束指针,表明指针是访问一个数据对象的唯一方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它指针来修 ...

  8. C语言关键字restrict

    简介 关键字restrict只用于限定指针:该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于该指针的,即不存在其他进行修改操作的途径:这样的后果是帮助编译器进行更好的优化,生成更有效 ...

  9. 【C】C语言基础(包括:关键字、数据类型、输入输出)

    程序中的变与不变--变量与常量 标识符和关键字 标识符:用来标识程序中用到的变量名.函数名.类型名.数组名.文件名以及符号常量名的有效字符序列. 语法规则(部分): 标识符只能是由英文字母.数字和下划 ...

最新文章

  1. e1载波把32个信道按_E1载波把32个信道按(11)方式复用在一条2.048Mb/s的高速信道上,每条话音信道的数据速率是(12)。...
  2. Debian中几个bash初始化脚本使用区别--【转载】
  3. CTFshow 命令执行 web48
  4. SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)
  5. MAC解决连接服务器,一段时间不操作导致断开连接,卡顿一段时间的问题。
  6. Vue项目实战07:引入Normalize.css样式初始化
  7. 如何安装ipython notebook_IPython notebook安装指导
  8. 将c程序移植到linux,各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误...
  9. 【LeetCode笔记】剑指 Offer 64. 求1 + 2 + ... + n (Java、限制语法、二刷)
  10. c 子类对象 访问父类对象受保护成员_面向对象的三大特征
  11. python统计表中单词及其出现的次数 字典形式输出_统计字符串中字母出现的次数,字典形式输出(python)...
  12. 处理顶点——使用顶点缓冲和索引缓冲将顶点和索引保存在显存中
  13. 微信内跳转支付宝App、跳转淘宝App方案
  14. 苹果电脑分屏之后没有声音_MAC录屏没有声音? 如何在苹果电脑MACBOOK上录音录屏...
  15. 用动画做出一个正方体并且3d旋转,详解
  16. 关于java基础知识的代码引用
  17. amigo幸运字符什么意思_无线网络ssid是什么意思(全面解析SSID涵义)
  18. Mac安装激活 MATLAB R2018a
  19. 基于HMM的拼音转汉字程序
  20. 大多数的愤怒源于自己的无知——《Excel受保护视图》

热门文章

  1. Easy Excel 解析Excel
  2. 卷积神经网络英文文献,卷积神经网络 英语
  3. linux中如何创建及复制文件/文件夹的软链接?
  4. POI操作word在标签位置插入表格
  5. Spark转换算子和执行算子
  6. ACSI: 360度无死角测量顾客满意度
  7. 缴纳个人所得税标准是多少
  8. Nvidia技术路线和卷积神经网络介绍
  9. 15大技巧成就人力资源工作(转)
  10. ultraedit反编译c语言,把Ultraedit变成一个IDE(C++)