为了限制pointer aliasing,到目前为止,我已经使用了GNU GCC编译器提供的C ++扩展部分中描述的__restrict__
类型限定符here。例如,以下函数,
void fn (int *__restrict__ rptr, int &__restrict__ rref)
{
/* ... */
}
接受受限制的指针和受限制的引用作为其参数。
随着unique_ptr
引入C ++标准,我想知道GCC编译器是否会使用unique_ptr
提供相同的优化(或更好)机器代码。
是否还应使用__restrict__
等扩展程序?在最近的C ++标准中有更好的方法来产生相同的优化(用于指针和引用)吗?
答案 0 :(得分:2)
__restrict__
和unique_ptr
执行不同的操作。 __restrict__
承诺没有其他任何东西引用此对象(因此编译器可以优化)。 unique_ptr
管理堆分配对象的生命周期。它不允许优化器做出任何假设。
如果有一种方式可以说“这个unique_ptr
是引用这个对象的唯一方法”,那将是很好的,但我不知道GCC是否支持它。