【问题标题】:Is it ever useful to apply restrict to a single pointer parameter?将限制应用于单个指针参数是否有用?
【发布时间】:2018-03-16 20:05:06
【问题描述】:

假设我有一些函数只接受一个指针参数,不访问全局变量,并且不以“可疑”方式生成另一个指针(即它可能获取本地地址但不生成地址或从另一个线程等获取它)。用restrict 标记指针是否有帮助,还是没用?换句话说,编译器是否将此类指针参数视为隐式restricted?

此外,当函数可能使用 malloc() 或类似的东西时,同样的问题(所以可能,可能,有点担心混叠)。

【问题讨论】:

  • restrict 正是用于此目的。这个关键字是 your 声明内存不会以“可疑”方式处理。当存在“可疑”代码时使用restrict 是对编译器的欺骗,并且会导致不可预知的结果..
  • 那么看来你用错了。它不是编译器来执行检查,而是声明you不会使用指针指向相同的位置,因此允许编译器在为了进行更多优化。
  • @EugeneSh.:我说错了。我用它来指示不同的指针参数没有相互别名。问题是如果只有一个指针,对于“只有一个”的宽松定义,这是否也有意义。
  • restrict 不限于限定参数类型:) 一些局部变量也可以有效地为它起别名。最简单的方法是将其值分配给本地指针。
  • @EugeneSh.:对于restricted 指针来说,这不是“公平的游戏”吗?我的意思是,这是编译器在处理该函数时可以注意到的新别名。

标签: c performance compiler-optimization restrict


【解决方案1】:

如果所讨论的函数也可以直接访问全局变量,这将很有用——将restrict 放在指针上会告诉编译器您不会以除指针之外的任何方式访问指针指向的任何内容。因此,特别是,您读取或写入的任何全局变量都不会使用指针作为别名。

【讨论】:

  • 不好意思,我是想问一下不访问全局变量的情况,忘记说了。关键是编译器理论上可能会通过消除来确定restrict 是有效的。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多