相关疑难解决方法(0)

restrict关键字在C++中的含义是什么?

我总是不确定,在C++中,restrict关键字是什么意思?

是否意味着赋予函数的两个或更多指针不重叠?还有什么意思?

c++ restrict-qualifier

179
推荐指数
5
解决办法
10万
查看次数

如何避免别名并提高性能?

在此Stack Overflow答案中 ,证明了C++中的别名可能会降低代码速度.并且C++中的别名不仅适用于指针,它也适用于引用,更一般地适用于标准指定的这些类型.特别是有

一种聚合或联合类型,包括其成员中的上述类型之一(包括递归地,子聚合或包含联合的成员)

所以根据我的理解,如果我有如下代码,

 class A{
  public:
   int val;
 };

 void foo(vector<A> & array, int & size, A & a0) {
   for(int i=0;i<size;++i) {
    array[i].val = 2*a0.val;
   }
 }
Run Code Online (Sandbox Code Playgroud)

和可能的是,a0可以别名中的元素中的一个array,也可能是别名size由于上述引用的,所以a0size必须装载对于每次迭代导致性能下降.

  1. 然后我的问题是我应该怎么做代码以避免别名,并提高性能?
  2. 传递const &将无济于事,因为它不会避免标准规定的混叠.通过a0按值?但这会使a0我不喜欢的复制,因为在实践中,类A可能非常复杂,复制是一个非常昂贵的选择.
  3. 有没有一个通用的解决方案来避免C++中的别名?如果是,那是什么?

c++ c++11

12
推荐指数
1
解决办法
1615
查看次数

C ++限制语义

我正在更新性能关键型库以使用限制,这是g ++和MSVC在C ++ 11中使用关键字实施的__restrict。这似乎是最标准的扩展,所以我将使用restrict__restrict互换。

restrict 是C99关键字,但是编译器已经在C ++中定义了它的重要用法。

这篇文章打算成为一个“问题”,询问每种特定于C ++的用途及其含义,然后由CW回答。随时添加/检查/编辑。因此:“帮助!这些restrict关键字的C ++使用是什么意思?”

  1. 合格this(限制方法):

    void Foo::method(int*__restrict a) __restrict { /*...*/ }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 限制参考:

    int&__restrict x = /*...*/;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 限制在模板内:

    std::vector<float*__restrict> x;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 限制成员/字段。从技术上讲,这也适用于C语言struct,但是C ++中的问题要比C语言中的问题更多:

    class Foo final { public: int*__restrict field; };
    
    Run Code Online (Sandbox Code Playgroud)

c++ restrict restrict-qualifier

5
推荐指数
1
解决办法
923
查看次数

标签 统计

c++ ×3

restrict-qualifier ×2

c++11 ×1

restrict ×1