gpt4 book ai didi

c - `pointer[restrict static 1]` 在声明这样的指针时会带来什么优化好处?

转载 作者:行者123 更新时间:2023-12-03 20:15:45 27 4
gpt4 key购买 nike

我正在阅读库(QNNPack)的源代码并注意到这一行(https://github.com/pytorch/QNNPACK/blob/24d57f21503ba8ab0f8bb5d24148754a91266b9c/src/q8gemm/6x4-neon.c#L23):

void funcName(..., 
const union some_union_type some_union_arg[restrict static 1]) {
// ...
}

我理解关键字 restrictstatic总的来说,但恐怕我不知道这背后的原因。我在谷歌上没有找到任何东西,也许我搜索错了。

我猜这是一种告诉编译器该指针指向单个对象的方法。但我缺乏进一步解释的优化知识。

谢谢!

最佳答案

static在此上下文中,根据 C 标准具有以下含义:

6.7.6.3 Function declarators (including prototypes)

7 ... If the keyword static also appears within the [ and ] of the array type derivation, then for each call to the function, the value of the corresponding actual argument shall provide access to the first element of an array with at least as many elements as specified by the size expression.



这是程序的语义要求。如果函数的调用者不支持它,则行为未定义,并且他们有一个必须修复的错误。由于指定的大小是 1 ,这意味着该函数需要一个指向单个 union some_union_type 的有效指针对象,并通过它说 NULL本身就是未定义的行为。

这是一种在原型(prototype)中指定传递的指针必须有效的方法。编译器可以在理论上利用此信息并在传递 null 时发出警告。在实践中,这明确地记录了对该参数的要求,并且该函数甚至可以选择在访问指针之前不检查指针是否有效(因为它在其原型(prototype)中指定的合约需要一个有效指针)。
restrict指针上的限定符意味着函数假定指针是它直接或间接访问此数据的唯一方式。因此,例如,如果您将在其实现中访问的全局对象的地址传递给它,则行为将是未定义的。这个假设促进了编译器在某些地方的优化。

关于c - `pointer[restrict static 1]` 在声明这样的指针时会带来什么优化好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863084/

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