gpt4 book ai didi

c++ - C++ 标准中 `restrict` 关键字/属性的情况

转载 作者:可可西里 更新时间:2023-11-01 17:53:05 26 4
gpt4 key购买 nike

简而言之,restrict应该告诉编译器指针不能指向相同的内存位置。这对于函数参数和进一步的编译器优化非常有用。在科学计算中,restrict 的使用非常广泛。

目前restrict关键字只是C99的一部分,C++还没有。我们know that a lot of C++ compilers support __restrict__ as an extension. This question还详细讨论了 restrict__restrict__ 的作用。

现在,上述问题中的讨论发生在很久以前,并没有谈论C++17、C++20,也没有谈论 future 标准的计划。我找到了 n3988 proposal讨论了 C++ 中类似 restrict 的别名、C++ 中语法更丰富的复杂性以及可能的补救措施。

根据 IBM 博客 (2014),n3988 was encouraged for future work .

This question谈论 restrict 和 C++ 的历史,但没有关于实际实现的任何结论,并提到我已经列出的论文或 the one mentioned in the comments (p1296) .

除此之外,我找不到关于在即将推出的 C++ 中支持 restrict 的计划的任何内容(据我所知,它不是 C++17 的一部分)。这似乎是一个非常有用的功能,所以我想知道

  • 如果我在提案/讨论方面遗漏了什么?
  • 关于 C++ 中的 restrict 用法还有其他信息吗?
  • 是否有其他方法可以通过仅使用“标准”功能来实现编译器优化(__restrict__ 允许)?

最佳答案

完全不像 C 的 restrict甚至在 C++20 中。 paper already mentioned在 2018 年 11 月的初步演示中受到好评,也许是因为它避免了限定符的关键困难——即使是 C 语言,也没有人了解它如何与类型系统的其余部分交互。部分原因是添加 restrict不会改变任何一个指针的含义,但会影响它与一组其他指针(其成员资格未明确指定)的关系,具体取决于稍后对它们执行的算术。另一部分是因为 C++ 允许对类型进行如此多的操作:std::vector<T *restrict> 会怎样?意思是什么,索引 a std::vector<T> &restrict 的类型是什么? ?

目前尚不清楚这种基于契约的方法将提供什么样的实际优化机会;一般而言,关于契约(Contract)和优化仍有许多 Unresolved 问题。

关于c++ - C++ 标准中 `restrict` 关键字/属性的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56283350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com