gpt4 book ai didi

pointers - 有没有安全的替代方法可以将不安全的slice::from_raw_parts替换为原始指针?

转载 作者:行者123 更新时间:2023-12-03 11:48:21 25 4
gpt4 key购买 nike

我有一个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造成的。

关于pointers - 有没有安全的替代方法可以将不安全的slice::from_raw_parts替换为原始指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62682845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com