【问题标题】:Is there a safe alternative to replace the unsafe slice::from_raw_parts for raw pointers?是否有替代原始指针的不安全 slice::from_raw_parts 的安全替代方法?
【发布时间】:2020-07-01 18:05:40
【问题描述】:

我有一个可以从任何语言调用的 Rust 动态库。导出函数的参数是两个char * 指向内存的指针和每个内存的两个长度。

问题是from_raw_parts 减少到一个 memcpy 并且如果例如长度错误,可能会以各种危险的方式出现段错误。然后我在切片上使用 bincode::deserialize 将它们用作 Rust 对象。有没有更安全的方法来处理传入的指向内存的原始指针?

【问题讨论】:

  • 所以您的问题是“我如何信任或检查指针”?你不能。这就是 Rust 的 unsafe 存在的原因。

标签: pointers rust memcpy memory-safety


【解决方案1】:

没有。

你问的没有意义。在某种程度上,Rust 语言存在的全部原因是因为原始指针本质上是危险的。 Rust 的引用(及其相关生命周期)是一种执行编译时检查以确保指针有效且可以安全使用的结构化方式。

一旦您开始使用原始指针,编译器将无法再帮助您处理这些指针,现在需要您来确保安全性得到保证。


from_raw_parts 简化为 memcpy

这似乎不正确。不应复制任何内存来创建切片。 Rust 切片实际上只是一对(pointer, length) — 与您分别传入的内容相同。我希望它们每个都是寄存器大小的,所以调用 memcpy 将是矫枉过正。

使用生成的切片可能涉及复制数据,但这不再是由于from_raw_parts。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多