我正在编写用于处理来自JavaScript环境中字符串的WebAssembly Rust代码。
由于WebAssembly没有真正的字符串类型,因此我试图传递指向UTF-8编码字符串的WebAssembly内存对象的指针。
#[no_mangle]
pub extern "C" fn check(ptr: *mut u8, length: u32) -> u32 {
unsafe {
let buf: &[u8] = std::slice::from_raw_parts(ptr, length as usize);
// do some operations on buf
0
}
}
它很好用,只是我不得不依赖于std
库,这使最终的二进制文件膨胀到约600KB。
有没有办法摆脱std::slice::from_raw_parts
,但仍能将原始指针转换为切片?
libcore
和libstd
使用的代码量是完全相同的。std::slice::from_raw_parts_mut
就是core::slice::from_raw_parts_mut
。从一个库切换到另一个库不应该改变任何东西。这似乎确实像某些未使用的代码或数据没有被正确删除的情况。 - Shepmasterstd
,我还添加了 "#![no_std]" 及其对应项。这些代码对最终的二进制文件产生了很大的影响。 - liuyanghejerry