在C ++中使用`restrict`类型限定符和`unique_ptr`进行限制别名

时间:2015-12-27 14:22:27

标签: c++ gcc smart-pointers strict-aliasing

为了限制pointer aliasing,到目前为止,我已经使用了GNU GCC编译器提供的C ++扩展部分中描述的__restrict__类型限定符here。例如,以下函数,

void fn (int *__restrict__ rptr, int &__restrict__ rref)
 {
   /* ... */
 }

接受受限制的指针和受限制的引用作为其参数。

随着unique_ptr引入C ++标准,我想知道GCC编译器是否会使用unique_ptr提供相同的优化(或更好)机器代码。

是否还应使用__restrict__等扩展程序?在最近的C ++标准中有更好的方法来产生相同的优化(用于指针和引用)吗?

1 个答案:

答案 0 :(得分:2)

__restrict__unique_ptr执行不同的操作。 __restrict__承诺没有其他任何东西引用此对象(因此编译器可以优化)。 unique_ptr管理堆分配对象的生命周期。它不允许优化器做出任何假设。

如果有一种方式可以说“这个unique_ptr是引用这个对象的唯一方法”,那将是很好的,但我不知道GCC是否支持它。