假设我在 Rust 代码中有以下定义:
#[wasm_bindgen]
pub struct RustType {
foo: usize
}
#[wasm_bindgen]
impl RustType {
#[wasm_bindgen(constructor)]
pub fn new() -> Self {
Self { foo: 100 }
}
}
#[wasm_bindgen]
pub fn print_addr(obj: &RustType) {
console_log!("rust addr = {}", obj as *const _ as u32);
}
JS 代码创建一个实例RustType
并将其传递给print_addr
函数:
var obj = new RustType();
print_addr(obj);
像这样修改生成的print_addr
函数后index_bg.js
:
export function print_addr(obj) {
_assertClass(obj, RustType);
console.log("js addr = ", obj.ptr); // <== added this line
if (obj.ptr === 0) {
throw new Error('Attempt to use a moved value');
}
wasm.print_addr(obj.ptr);
}
在开发控制台中,我得到以下输出:
js addr = 1114120
rust addr = 1114124
问题是为什么 Rust 指针和 JS 指针的值不同?同样根据我的观察,Rust 指针和 JS 指针之间的差异总是等于 4。为什么会这样?