相关疑难解决方法(0)

什么是严格别名规则?

当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?

c strict-aliasing undefined-behavior type-punning

778
推荐指数
10
解决办法
19万
查看次数

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

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

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

c++ restrict-qualifier

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

严格别名的性能优势

在C中,观察严格混叠会带来什么样的性能优势?

c performance

17
推荐指数
1
解决办法
1万
查看次数

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

在此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
查看次数