restrict-qualifier相关内容

C99 'restrict' 关键字的实际用法?

我浏览了一些文档和问题/答案,看到有人提到了.我读了一个简短的描述,说明它基本上是程序员的一个承诺,即不会使用指针指向其他地方. 谁能提供一些实际案例来证明它的实际使用价值? 解决方案 restrict 表示指针是唯一访问底层对象的东西.它消除了指针别名的可能性,使编译器能够进行更好的优化. 例如,假设我有一台带有特殊指令的机器,可以将内存中的数字向量相乘,我有以下代码: v ..
发布时间:2021-12-18 22:59:42 其他开发

MSVC++ 限制关键字和局部变量

我已经阅读了许多关于 restrict 关键字的帖子.但几乎我能找到的每个例子似乎都只涉及一个函数的输入参数,也许是一个单一的值.我需要澄清一下我的理解. 我发现了一个函数,它的输入参数和局部变量看起来都完全违反了关键字规则. 使用指向缓冲区的 void* 调用此函数,并将指针声明为 __restrict(这是 Microsoft Visual C++).然而在函数的后面,声明了一个 ..
发布时间:2021-09-18 19:12:09 C/C++开发

C 用 typedef 限制

我现在正在做一些代码并且在使用restrict关键字时遇到了一些问题. typedef int* pt;int foo(pt a, pt b){.../* 东西 */} 如果我想限制 a 和 b 怎么办?以下代码失败: typedef int* pt;int foo(pt 限制 a, pt 限制 b){.../* 东西 */} 提前致谢. 解决方案 你需要一个“限制整数的指针"in ..
发布时间:2021-09-11 19:47:41 其他开发

为什么strict关键字不属于C ++?

标题说明了一切.我很好奇为什么strict关键字不属于C ++?我对C ++不太了解,我仍然无法在网上找到任何可以阻止这一点的原因.没有人知道如果C ++标准使用与C相似的方式使用此关键字,会发生什么可怕的事情?就是根本不需要吗? 更多说明:它与使用无关,也许我一生都不会从此关键字中受益.这个问题只是出于好奇,因为约束是C99以来C的一部分,也就是15年. 也请阅读以下内容:我对技术原 ..
发布时间:2021-04-19 19:14:39 C/C++开发

可以通过将变量标记为volatile来修复不安全的类型修饰吗?

在zwol对的回答中,通过在一个结构(另一个结构的子集)之间强制转换指针而不是第一个结构来实现C继承是否合法?成员?他举例说明了为什么在类似结构之间进行简单的类型转换并不安全,并且在注释中有一个示例环境,该行为在其中表现出异常:在-O2上用gcc编译以下内容导致其打印"x = 1.000000 some = 2.000000" #include #include ..

将限制关键字用于2d数组函数参数的语法是什么?

我在主函数中声明了一个数组: float A[n][n]; 我的目标是使用restrict关键字将其传递给函数: void func(int n, float restrict A[][n]) 我尝试了上面的语法,但是我没有获得期望的运行时间优化.我也看到了1d数组的这种语法: void func(int n, float A[restrict]) 解决方案 可以限制指针.以下 ..

为什么限制限定符仍允许memcpy访问重叠内存?

我想看看restrict是否会阻止memcpy访问重叠内存. memcpy函数将 n 个字节从存储区src直接复制到存储区dest .内存区域不应重叠. memmove使用缓冲区,因此没有重叠内存的风险. restrict限定符表示在指针的生存期内,只有指针本身或直接来自指针的值(例如pointer + n)才可以访问该对象的数据.如果不遵循意图声明,并且对象由独立的指针访问,则 ..
发布时间:2020-05-08 18:49:57 其他开发

限制成员函数的限定符(限制这个指针)

注意:为了澄清,问题不在于一般使用 restrict 关键字,而是关于将其应用于成员函数如此处所述。 gcc允许您使用 __ restrict __ (相当于C99的 restrict )限定符的GNU ++在一个成员函数上,有效地使这个成为函数范围内的一个限制限定指针。牛肉在哪里? 大多数成员函数在其他成员上工作,通过这个访问它们,这是一个 T * const (并且通常是不确定的) ..
发布时间:2018-04-21 10:50:01 C/C++开发

C ++限制语义

我正在更新性能关键库以使用restrict,如在C ++ 11中通过g ++和MSVC使用关键字 __ restrict 实现的。这似乎是最标准的扩展,所以我将使用 restrict 和 __ restrict 可互换。 restrict 是一个C99关键字,但是编译器在C ++中定义了它的重要用途。 这个帖子是一个“问题”,询问每个C ++的具体使用是什么,它的意思,后面是一个CW答 ..
发布时间:2016-10-30 03:23:10 C/C++开发

路过限制合格的函数指针?

限制合格的指针为具有规则被向我解释:由指针访问的任何对象,任何地方修改仅是有史以来指针访问。所以下面是不行的,对吧? 无效agSum为(int *限制X,INT N){ 对(INT I = 0; I&所述; n-1个;我+ +)×[I + 1] + = X [I]; }INT SumAndFree为(int *限制Y,INT N){ agSum(Y); 的printf(“% ..
发布时间:2016-08-23 12:01:58 C/C++