对数组使用限制?

2024-02-08

有没有办法告诉 C99 编译器我访问给定数组的唯一方法是使用 myarray[index] ? 说这样的话:

int heavy_calcualtions(float* restrict range1, float* restrict range2)
{
    float __I promise I won't alias this__ tmpvalues[1000] = {0};

    ....
    heavy calculations using range1, range2 and tmpvalues;
    ....
}

通过使用限制,我承诺不会为 range1 和 range2 起别名,但是如何对函数内声明的数组执行相同的操作?


尽管 Jeff 的答案是正确的,即您始终可以创建指向已分配数组的指针,但事实是编译器knows在编译时,tmpvalues 不会被别名,因为该变量被声明为实际数组,而不是指针。为数组添加别名的唯一机会是声明指向它的指针,因此如果不这样做,则无需将其声明为restrict。如果tmpvalues是函数中唯一的变量。

如果您将指针传递给另一个函数,则可能会出现问题,那么您应该在那里声明接收到的指针是否受到限制。

我遇到的与该主题相关的文档包括C99 http://c0x.coding-guidelines.com/6.7.3.1.html:

设 D 是一个普通标识符的声明,它提供了一种方法 将对象 P 指定为类型 T 的限制限定指针。

请注意,它仅适用于指针。

这份其他文件 http://processors.wiki.ti.com/images/f/ff/Bartley%3DWiki_1.1%3DPerformance_Tuning_with_the_RESTRICT_Keyword.pdfTI 提供了一些性能调整提示,使用restrict关键词。除了所有提示之外,第 3.3 节还提供了何时可以应用此类型限定符以及何时不可以的示例。寻找x第 16 页中间的数组声明,它声明它没有声明指针,因此不能restrict-合格的。

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

对数组使用限制? 的相关文章

  • Volatile.Read 和 Volatile.Write 背后的逻辑是什么?

    来自 MSDN Volatile Read 读取字段的值 在需要它的系统上 插入一个 阻止处理器重新排序内存的内存屏障 操作如下 如果在该方法之后出现读或写 代码 处理器无法移动它before这个方法 and Volatile Write
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp

随机推荐

  • 三角函数调车场算法

    我正在致力于用 C 实现调车场算法 虽然它可以很好地解析带有符号 和 的数学表达式 但由于某种原因 它不适用于正弦余弦函数 例如 如果我尝试计算 sin 45 我会得到 0 707106 但是当我尝试解析表达式时 sin 25 cos 15
  • 如何使用 Windows 搜索搜索 Jar 文件?

    我相信当我们使用 Win2K 时 Windows 搜索会搜索 Jar 文件来查找特定的类 但这在 XP 中似乎不起作用 有谁知道如何在 XP 中启用此功能吗 请注意 要在 Win2K 中进行搜索 我们只需输入 jar 作为文件 并输入 Cl
  • PHP: header("位置...突然停止工作

    我在我的服务器上修改了一个非常简单的 php 页面 它停止工作了 结果我得到一个空白页 其中没有源代码 我修改回以前的网址 但它仍然不起作用 这是怎么回事 Thanks
  • Mongoose 复合索引唯一 + 稀疏

    我想创建一个索引来确保我没有重复的serialNr的组合内 manufacturer art 但有些物品没有serialNr 这些我不想检查 索引 Code mySchema index serialNr 1 art 1 manufactu
  • 多核和java

    我刚刚读到 服务器如何处理多个请求 最终得到了 java 多线程和多核 cpu 在计算机是单核的时候 如果 java 同时有 2 个线程 那么 jvm 调度程序将负责为每个线程分配时间 因此 两个线程永远不会并行运行 而是利用理想时间 例如
  • 如何在单独的线程中创建带有进度条的MFC对话框?

    我的应用程序可能需要一段时间才能连接到数据库 此连接是通过单个库函数调用建立的 即我无法将进度更新放在那里并进行回调或类似的操作 我的想法是在连接到数据库之前在单独的线程中创建一个带有进度条的对话框 该对话框将不断更改进度状态CProgre
  • 从 VIM 插件中检测文件类型?

    我有一个 vim 插件 它定义了一堆键映射 我试图弄清楚如何根据文件类型更改键映射的定义 例如 如果文件是 py 则将键映射到 X 如果文件是 php 则将键映射到 Y Thanks 是的 一种方法是使用 autocmd 调用设置地图的自定
  • 使用 DDD 创建子实体的正确方法

    我对 DDD 世界相当陌生 在阅读了几本有关它的书籍 其中包括 Evans DDD 后 我无法在互联网上找到我的问题的答案 使用 DDD 创建子实体的正确方法是什么 你看 互联网上的许多信息都在某种简单的层面上运作 但细节是魔鬼 为了简单起
  • iOS地理围栏中区域可以设置的最大和最小半径是多少

    我当时正在 iOS 中进行地理围栏工作 我实际上想在地图上设置不同的区域 每个区域的半径不同 我实际上想知道 iOS 地理围栏中区域的最小和最大半径 Thanks 在 iOS 中 没有指定最小半径 苹果表示 具体的阈值距离由硬件和当前可用的
  • laravel dusk TeaDown() 必须与 Illuminate\Foundation\Testing\TestCase::tearDown() 兼容

    public function tearDown this gt browse function Browser browser browser gt click navbarDropdown gt click dropdown item
  • 这些嵌套向量是如何连接的?

    我编写了一段代码 它创建了一个向量 记分板 其中包含 3 个大小为 3 的独立向量 所有向量都包含符号 在所有索引 0 2 处 当我现在执行 向量集 时在记分牌的第一个向量上 要将其第一个元素更改为 X 向量 2 和 3 也会更改 这是如何
  • 防止在 Javascript 中自动创建全局变量

    我刚刚花了一些时间调试一个问题 归根结底是忘记使用var关键字位于新变量标识符前面 因此 Javascript 会自动在全局范围内创建该变量 有什么方法可以防止这种情况发生 或者更改默认行为 而不使用像 JSLint 这样的验证器 在编写和
  • 如何仅在第一次启动时显示视图?

    我使用 Xcode 4 5 和故事板构建了一个应用程序 第一次启动应用程序时 我希望初始视图控制器出现 并附带必须接受才能继续的条款和条件 之后 我希望应用程序启动并跳过第一个视图控制器并转到第二个视图控制器 我知道我必须使用 NSUser
  • Android 4.3 BTLE作为服务器:如何启动广告?

    我正在尝试使用 4 3 中的新 BTLE API 在 Nexus 7 上实现 BTLE 服务器 我遇到了几个问题 首先 SDK 中没有示例 唯一的例子是针对客户的 其次 文档实际上告诉你做错误的事情 它指出 人们必须使用BluetoothA
  • 如何检测 MemoryMappedFile 是否正在使用

    在 C 4 0 中 MemoryMappedFile有几种工厂方法 CreateFromFile CreateNew CreateOrOpen or OpenExisting 我需要打开MemoryMappedFile如果存在 则从文件创建
  • Gitlab docker 和 external_url

    你好 我使用 docker 安装了最新的 gitlab 我使用 p 10080 80 和 10022 22 启动容器 我可以浏览 gitlab 并执行我需要的操作 我什至可以分别使用端口 10080 和 10022 git 克隆 http
  • 如何在android webview中启用默认突出显示菜单?

    如何在 android webview 中启用默认文本突出显示菜单 例如 复制 粘贴 搜索 共享 在 Android 1 5 2 3 上工作 您可以使用emulateShiftHeld 自 2 2 起公开 但现在已弃用 此方法将您的 Web
  • 使用 'hd' 参数限制 Google OAuth 访问一个域 (Django / python-social-auth)

    我正在构建一个内部网络应用程序供我的公司使用 并希望使用我们的 Google Apps 域来管理来自我们公司域用户名的访问 本问题的其余部分为 example com 我在用着 Django 1 9 5 python social auth
  • 如何在日期字段上显示日期选择器日历

    这是关于如何使用 jQuerydate picker在 django 支持的站点中 models py is from django db import models class holidaytime models Model holid
  • 对数组使用限制?

    有没有办法告诉 C99 编译器我访问给定数组的唯一方法是使用 myarray index 说这样的话 int heavy calcualtions float restrict range1 float restrict range2 fl