当声明这样的指针时,“pointer[restrict static 1]”会带来什么优化好处?

2024-03-15

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

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

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

Thanks!


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

6.7.6.3 函数声明符(包括原型)

7 https://port70.net/~nsz/c/c11/n1570.html#6.7.6.3p7...如果关键字 static 也出现在 [ 和 ] 中 数组类型推导,然后对于该函数的每次调用, 相应实际参数的值应提供对 数组的第一个元素,其元素数量至少与大小表达式指定的元素数量相同。

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

这是在原型中指定传递的指针必须有效的一种方法。理论上,编译器可以利用此信息并在传递 null 时发出警告。实际上,这明确地记录了对该参数的要求,并且该函数甚至可以选择在访问它之前不检查指针是否有效(因为它在其原型中指定的合约demands一个有效的指针)。

The restrict指针上的限定符意味着该函数假定指针是直接或间接访问该数据的唯一方式。例如,如果您将其在实现中访问的全局对象的地址传递给它,则行为将是未定义的。这种假设促进了编译器在某些地方的优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当声明这样的指针时,“pointer[restrict static 1]”会带来什么优化好处? 的相关文章

随机推荐

  • 列表理解中的“with”关键字? [复制]

    这个问题在这里已经有答案了 我遇到了这种用于读取文件中的行的语法 with open as f for line in f
  • 使用 TFS API 检测文件删除更改(自动,无需 VS 交互)

    我在 tfs 工作区中有一个本地文件夹并使用 TFS API 每天晚上我都会删除这个文件夹 然后将数据库脚本编写为 sql 文件 如果现在添加或编辑了某些内容 则会找到更改并进入待处理的更改以进行签入 问题是我如何使用 TFS API 检测
  • Python将字符串转换为变量名

    我知道这可能会出现重复 但到目前为止我还没有找到 或者应该理解 我正在寻找的答案 我有一个字符串列表 想要将每个字符串转换为一个变量名 然后为其分配一些内容 我知道我可能需要一个字典 但我对它们不熟悉 因为我对 python 相对较新 并且
  • Android wifimanager总是返回true

    这简直要了我的命 任何帮助将不胜感激 我想使用 wifi 管理器连接到开放网络 我遇到的问题是该代码声称连接到任何网络 甚至是不存在的网络 下面是执行并使用网络 SSID 调用的完整代码 无论您传递给它什么字符串作为网络的 SSID 即使不
  • 是否可以释放静态定义的数组?

    您可以释放使用静态分配定义的数组的内存吗 不 这是不可能的取消分配静态分配的内存 根据语言 例如 C C 使用指针 您也许可以将此数组所持有的内存用于其他目的 但这样做只会re use记忆 内存不会被释放per se 也就是说 将静态内存与
  • 调用基类构造函数而不命名其类

    class MyDerived public Incredble
  • iphone dev - NSUserDefaults 检查布尔值是否存在

    我刚刚向我的应用程序添加了一个设置包 但在读取布尔设置时遇到问题 我知道 在启动应用程序时 除非用户实际输入设置 否则不会读取设置 这就是我想要捕获的内容 但是 我的代码只是捕获答案是否为 否 或尚未设置的情况 我需要查明它们是否已设置 然
  • 如何去除 iPhone 中的阴影

    我正在使用以编程方式从按钮制作阴影的标准方法 但我希望在完成按钮后阴影不再存在 我可以将不透明度设置为 0 但阴影是否仍然存在 如果存在 仍然会对系统造成负担 谢谢 这给出了一个错误 tempButton superview layer s
  • HTML 电子邮件模板是否需要使用 style 属性?

    是否存在需要 出于某种原因 将 CSS 规则放置在style直接使用 HTML 标签的属性 而不是将 CSS 规则放置在 HTML 电子邮件模板 HEAD 的 STYLE 元素中的选择器内 我要求最常见的 CSS 选择器 如类型 类 ID
  • php 爆炸并强制数组键从 1 而不是 0 开始

    我有一个字符串 它将被分解以获得一个数组 正如我们所知 输出数组键将从 0 开始作为第一个元素的键 1 为第二个元素 依此类推 现在如何强制该数组从 1 而不是 0 开始 对于类型化数组来说非常简单 我们可以这样写 array 1 gt v
  • 如何从标准输入构建 tar?

    我怎样才能将信息输入tar指定文件名 就像是 tar cfz foo tgz files from 但请记住 这并不适用于所有可能的文件名 你应该考虑 null选项和饲料tar from find print0 The xargs示例对于大
  • 这种模式似乎很详尽,但我仍然收到警告

    我正在学习 sml 并编写了以下简单函数 Return a list with every other element of the input list fun everyOther everyOther x x everyOther x
  • 使用键绑定在 VSCode 中执行预定义的查找替换全部

    我似乎找不到可以从 VSCode 键绑定运行的记录命令的良好列表 在在线 VSCode 文档中 命令指南 https code visualstudio com api extension guides command列出了两种发现命令的方
  • 具有下一个和上一个功能的一张一张显示图像

    我已将图像存储在单独的文件夹 图像 中 并创建了一个存储 letterNumber 的数据库 并且每个 letterNumber 都关联了多个图像 表 animages 如下 letterNo imageNo path height wid
  • Rails 4 find_by 是否已弃用?

    我听说 find by 已被弃用 这是真的吗 我一直在考虑替代方案 例如为每个人创建find另一种方法 例如 before Model find by username username 后 模型中 class lt lt self def
  • 我可以使用异步函数进行无限递归而不产生堆栈溢出吗

    我有一个异步函数 我想调用它等待用户操作并在一些处理后解析 async function waitOnUserInput 我想等待用户输入进行一些处理并重复 所以 我想像这样递归地实现这个 async function actionUser
  • 模态呈现的视图控制器的透明背景

    我正在使用 Parse 和 ParseUI 我希望我的 PFLoginViewController 子类具有透明背景 将来 我想在背景上放置一个模糊的视图 但是 一旦 PFMLogin ViewController 的动画输入完成 背景就会
  • 电子表格函数根据另一列的条件对一列中的所有值求和

    我想要一个电子表格函数 当 A 列等于时 它将生成 B 列中所有值的总和X当它等于Y A B X 10 Y 3 X 7 X 22 Y 4 Y 9 输出应如下所示 其中39 and 16是公式的结果 X 39 gt 10 7 22 Y 16
  • 如何在 Spring 中创建默认的可重写组件?

    我正在尝试创建一个Component那将是Autowired除非用户创建不同的实现 我使用以下代码来尝试隔离问题 界面 public interface A 实施 Component ConditionalOnMissingBean A c
  • 当声明这样的指针时,“pointer[restrict static 1]”会带来什么优化好处?

    我正在阅读库 QNNPack 的源代码并注意到这一行 https github com pytorch QNNPACK blob 24d57f21503ba8ab0f8bb5d24148754a91266b9c src q8gemm 6x4