orl*_*rlp 12 pointers language-lawyer rust
我有一个指向的元素buf: *const T分配开始的指针,并且定义了以下检查:nT
let in_alloc = buf <= ptr && ptr < unsafe { buf.add(n) };
Run Code Online (Sandbox Code Playgroud)
是否保证 是in_alloc的分配中的true任何一个,以及在任何其他情况下?我们可以假设是一个指向对象的有效指针(因此不是未对齐/空/悬挂),但是它可能来自也可能不是来自与 相同的分配。最后我们可以假设大小不为零。ptrbuffalseptrTbufT
回答标题,比较任意两个指针是明确定义的,因为指针实现了Ord.
由于指针是完全有序的,所以问题的主体很容易由此得出。您有一组n不同的指针,起始于buf + 0并结束于buf + (n - 1)。如果ptr小于则buf不能等于其中任何一个。如果ptr大于buf + (n - 1)它也不能等于它们。如果ptr是其中之一,则两个表达式的计算结果均为 true。
您可以稍微回避这个问题并使用Range:
let end = unsafe { buf.add(n) };
let in_alloc = (buf..end).contains(ptr);
Run Code Online (Sandbox Code Playgroud)
例如,这经常用于检查切片是否包含指针。
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |