gpt4 book ai didi

c++ - 在哪些情况下应用于返回值的 restrict 限定符会产生影响?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:09 26 4
gpt4 key购买 nike

如果我有一个这样声明的成员函数:

double* restrict data(){
return m_data; // array member variable
}

restrict 关键字能做什么?

Apparently, with g++ (x86 architecture) it cannot ,但是是否有其他编译器/架构在这种类型的构造中有意义,并且允许优化机器代码生成?

我问这个问题是因为 Blitz 库 (Blitz++) 有一大堆以这种方式声明的函数,除非它确实做了一些事情,否则有人会进入并添加 restrict 关键字是没有意义的。因此,在我进入并删除 restrict(以消除编译器警告)之前,我想知道我是如何滥用代码的。

最佳答案

我们在谈论什么限制

restrict 目前是非标准的.. 这意味着它是一个编译器扩展;它是不可移植的,因为 C++ 标准没有强制要求它存在,也没有任何正式文本告诉我们它应该做什么。

restrict 目前是特定于 C++ 的编译器,必须求助于他们选择的编译器文档才能确切地了解它在做什么。


一些想法

关于restrict的用法的论文很多,其中:

在多个地方暗示了 restrict 的目的是限定指针,以便编译器知道同一作用域中的两个指针不指向同一内存位置。

考虑到这一点,我们可以很容易地看出返回类型与其他指针没有潜在的冲突,因此在这种情况下使用它通常不会获得任何优化机会。然而;一个人必须引用所用实现的记录行为才能确定。如所述:restrict 不是标准的,yet .


我还发现了以下线程,其中 Blitz++ 的开发人员讨论了删除应用于函数返回类型的 strict,因为它什么都不做:


一点注意

作为进一步说明,这里是 LLVM Documentation 的内容说到 noalias vs restrict:

For function return values, C99’s restrict is not meaningful, while LLVM’s noalias is.

关于c++ - 在哪些情况下应用于返回值的 restrict 限定符会产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962133/

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