0

有人可以将翻译成对我有意义的东西:

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

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

    Stack Overflow原始指针标签既没有说“智能”也没有说“共享”,这又是一个谜。

  2. Crossbeam 的Shared::as_raw“标签”到底是什么?

4

1 回答 1

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

    • 所有权信息
    • 终身信息
    • 在未使用的位中打包额外数据
    • 写时复制行为
    • 引用计数

    在这种情况下,原始指针只是包装的指针,没有所有额外的东西。

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

    这个额外的数据被这个特定的库称为标记,但是该术语不像原始指针那样常见。

于 2020-08-23T17:16:11.487 回答