【发布时间】:2023-04-09 04:49:01
【问题描述】:
在编译成 Wasm 的 Rust 代码中进行堆分配内存时,会分配 Wasm 线性内存中的内存。
我是否正确理解指针的值是该内存中的偏移量?如果是,是否可以将值0 作为偏移量/指针并有效?
一个简单的例子是:
let data: Vec<u8> = Vec::with_capacity(123);
let data_ptr = data.as_ptr() as usize;
我可以假设data_ptr 是非零还是一个有效的地址?
【问题讨论】:
-
你可以假设指针不是
std::ptr::null。 -
只需阅读
with_capacity的文档即可回答您的问题。就是说,我不明白你为什么想知道这一点以及为什么要将它转换为使用。 -
@Stargateur 因为我需要从 Wasm 创建一个内存区域,将其地址转换为可用作导出 Wasm 函数的结果的类型,并从主机访问它以覆盖数据。
-
Vec 保证它的指针是非空的,所以这个例子可能不代表你的问题? null 由所有位为零表示的假设在 Rust 中很普遍,但我还没有将其确定为稳定的事实陈述(可能存在于某处)。
-
@SimonWarta 是的,确实如此。 Rust 不允许在引用中使用 null,也不会将堆放在那里。获得空指针的唯一方法是通过 C 绑定或手动不安全构造。
标签: rust webassembly rust-wasm