gpt4 book ai didi

c - restrict 关键字有多严格?

转载 作者:太空狗 更新时间:2023-10-29 15:58:09 30 4
gpt4 key购买 nike

我有以下简单的功能

static inline void
minVec(const double *restrict v, double *restrict vmin, unsigned length){
for (unsigned i = 0; i < length; ++i)
vmin[i] = -v[i];
return;
}

当我以这种方式使用它时编译和运行都很好

double v[] = {1, 2, 3};
minVec(v, v, 3);

我被引导相信在这种情况下使用 restrict 只会通知编译器循环的每次迭代都独立于其他循环,因此可以积极优化循环。这是正确的做法吗,还是我在这里探讨了一些实现定义的行为?

最佳答案

restrict 关键字纯粹是一个优化提示:它允许编译器对所有其他内存访问的受限指针的读/写重新排序。如果编译器无法证明指针后面的内存只能通过该指针访问,则无法完成此操作。

所以,如果你说 restrict,你实际上是在告诉编译器:“我向你保证,这个指针是唯一指向这个内存的指针,请随意重新排序。我完全知道如果我错了可能会出现蓝色大象,但我是人,我不会错的,向我鞠躬。”

这个关键字是为编译器着想的,不是为你着想的!

关于c - restrict 关键字有多严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456333/

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