是否有安全的替代方法来替换原始指针的不安全 slice::from_raw_parts?

Is there a safe alternative to replace the unsafe slice::from_raw_parts for raw pointers?

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

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

没有

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

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


from_raw_parts reduces to a memcpy

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

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