【发布时间】:2018-03-16 20:05:06
【问题描述】:
假设我有一些函数只接受一个指针参数,不访问全局变量,并且不以“可疑”方式生成另一个指针(即它可能获取本地地址但不生成地址或从另一个线程等获取它)。用restrict 标记指针是否有帮助,还是没用?换句话说,编译器是否将此类指针参数视为隐式restricted?
此外,当函数可能使用 malloc() 或类似的东西时,同样的问题(所以可能,可能,有点担心混叠)。
【问题讨论】:
-
restrict正是用于此目的。这个关键字是 your 声明内存不会以“可疑”方式处理。当存在“可疑”代码时使用restrict是对编译器的欺骗,并且会导致不可预知的结果.. -
那么看来你用错了。它不是让编译器来执行检查,而是声明you不会使用指针指向相同的位置,因此允许编译器在为了进行更多优化。
-
@EugeneSh.:我说错了。我用它来指示不同的指针参数没有相互别名。问题是如果只有一个指针,对于“只有一个”的宽松定义,这是否也有意义。
-
restrict不限于限定参数类型:) 一些局部变量也可以有效地为它起别名。最简单的方法是将其值分配给本地指针。 -
@EugeneSh.:对于
restricted 指针来说,这不是“公平的游戏”吗?我的意思是,这是编译器在处理该函数时可以注意到的新别名。
标签: c performance compiler-optimization restrict