crossbeam_epoch :: Shared :: as_raw通过“将指针转换为原始指针无标记”意味着什么?

问题描述

有人可以将this转换成对我有意义的东西吗?

将指针转换为原始指针(不带标签)。

  1. 指针和原始指针有什么区别?

    Stack Overflow raw-pointer标签没有说“智能”或“共享”,这同样是个谜。

  2. crossbeamShared::as_raw的“标签”是什么?

解决方法

  • crossbeam_epoch::Shared智能指针。也就是说,一个指针加上额外的东西。在C ++或Rust中,智能指针是用于指针包装的术语,它会添加以下任意内容:

    • 所有权信息
    • 终身信息
    • 将多余的数据打包到未使用的位
    • 写时复制行为
    • 引用计数

    在这种情况下, raw 指针只是包装的指针,没有所有多余的东西。

  • crossbeam_epoch::Shared适合(除其他外)上面的“在未使用的位中打包额外的数据”类别。现代计算机中的大多数数据都是对齐的,即地址是2的幂的倍数。这意味着地址的所有低位始终为0。人们可以利用这一事实在指针中存储一些额外的信息位。

    此特定的库将这些额外的数据称为tag,但是该术语并不像原始指针常见。