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

int i = 0;
int *a = &i;
int *b = &i;

这样会存在一个问题。

int foo(int *a,int *b)
{*a = 5;*b = 6;return *a+*b;//不一定是11
}

如果a和b都指向同一数据,b会导致a=6,返回12。所以编译器在做*a+b的时候,需要重新读取a指向的数据。

foo:movl $5,(%rdi) #存储5到*amovl $6,(%rsi) #存储6到*bmovl (%rdi),%eax #重新读取*a(因为有可能被上一行指令造成改变)addl $6,%eax #加上6ret

如果我们确保两个指针不指向同一数据,就可以用restrict修饰指针类型

int foo(int *restrict a,int *restrict b)
{*a = 5;*b = 6;return *a+*b;
}

编译器就可以根据这个信息,做出优化

foo movl $11,%eax #在编译器已计算出11movl $5,(%rdi) #存储5到*amovl $6,(%rsi) #存储6到*bret

C语言关键字restrict相关推荐

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

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

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

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

  3. C语言关键字 restrict(一)

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

  4. c语言restrict,一个c语言关键字restrict例子的疑问

    你对于restrict的理解是对的,只是楼主忽略了一件事情,这个关键字本身是用来帮助编译器优化代码的 怎么样优化呢,是告诉编译器,对于这个指针指向的值来讲,我只用这个指针修改,不会通过其他的指针修改, ...

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

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

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

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

  7. C语言关键字你知道几个?

    C语言关键字大全 关键字的基本概念: 被c语言赋予了特殊的含义的单词 关键字特征:全部都是小写 注意:关键字不能用做变量名 ANSI C标准C语言共有32个关键字: 数据类型关键字(12个) char ...

  8. c语言 char转int_C语言关键字及进制的转换你都知道吗?

    ​前面我们讲过 C语言简洁.紧凑 使用方便.灵活 那是什么使得C语言这么方便呢? 那就是关键字,或称保留字 C语言的关键字共有32个 根据关键字的作用 可分为 数据类型关键字 控制语句关键字 存储类型 ...

  9. c语言关键字_C语言初学者必须掌握的关键字!

    相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 其实小伙伴在写代码的时候,关键字还是用的比较多的,  今天大雄主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图 ...

最新文章

  1. 加密算法有哪些?对称加密和非对称加密的区别?
  2. apache 网站跳转至同一页面(可用于当网站在备案时显示告示)
  3. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...
  4. Python自动发送邮件-smtplib和email库
  5. php 模板替换,使用PHPWord对Word文件做模板替换
  6. 细数开源历史上的十个重大事件
  7. Unix基本系统数据类型和stat结构体
  8. Java测试驱动开发--总结
  9. 推荐几篇开源论文,包含人脸、目标检测跟踪、分割、去噪、超分辨率等
  10. 计算机考研408试题及答案,2015年计算机专业408考研试题及答案
  11. python数据预测模型算法_Python AI极简入门:4、使用回归模型预测房价
  12. jmeter mysql 执行计划_[PT_06] 性能测试-场景设计与实现(登录随机购买业务)
  13. 大数据笔试面试题(转载)
  14. Android 事件拦截分发
  15. 计算机键盘的型号,标准电脑键盘尺寸
  16. AutoCAD 2021 安装 详细教程
  17. P2627 [USACO11OPEN]Mowing the Lawn G(单调队列优化dp)
  18. 华为安全 HCIP 723题库+知识点
  19. golang实现的文件服务器
  20. 残留的过往伤感QQ日志_说太多,不如沉默

热门文章

  1. Java高级特性 实用类 (二)(第二十四天)
  2. Nancy之实现API的功能
  3. 系统重装git用户名密码忘了的恢复方法
  4. 老哥对国际支票、快递到付风险的分享
  5. [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理
  6. 哪些服务器支持avx指令,至强E5的AVX指令集功能
  7. Android12修改关机菜单按键触发方式
  8. HDFS Maintenance State
  9. eg XSSF instead of HSSF
  10. VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了