c++ - 在 C++ 中使用 `restrict` 类型限定符和 `unique_ptr` 的受限别名

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

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

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

接受一个受限指针和一个受限引用作为其参数。

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

是否还应该使用像 __restrict__ 这样的扩展?在更新的 C++ 标准中是否有更好的方法来产生相同的优化(对于指针和引用)?

最佳答案

__restrict__unique_ptr 做不同的事情。 __restrict__ promise 没有其他内容引用此对象(因此编译器可以优化)。 unique_ptr 管理堆分配对象的生命周期。它不允许优化器做出任何假设。

如果有一种方式说“这个 unique_ptr 是引用这个对象的唯一方式”,那就太好了,但我不知道 GCC 是否支持。

关于c++ - 在 C++ 中使用 `restrict` 类型限定符和 `unique_ptr` 的受限别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481314/

相关文章:

c++ - 删除指向不完整类型和智能指针的指针

c - 如何用 gcc 优化 "don' t care"参数?

gcc - 在 GCC 中链接包含循环引用的库

c++ - undefined reference "typeinfo for <class>"

c++ - 频繁读/写小文件会降低性能吗?

c++ - gcc/clang 在基本结构的后填充中布置派生结构的字段

c++ - std::unique_ptr 是为数组分配内存的错误工具吗?

c++ - 指针有拷贝构造函数吗?

c++ - 逐个删除动态数组的元素

C++ "Case label value exceed maximum value for type"