根据这条github注解,我可以通过直接访问wasm示例的内存来重新创建一个Uint 8 ClampedArray或从Rust/wasm返回的Uint 8Array:
const textureRaw = new Uint8ClampedArray(memory.buffer, texture.offset(), texture.size());
问题是,wasm-bindgen
生成的js文件已经示例化了一个wasm示例,我想访问这个特定示例的内存,但它似乎没有被导出:
// XXXXX_bg.js
const path = require('path').join(__dirname, 'ed25519_sigs_bg.wasm');
const bytes = require('fs').readFileSync(path);
let imports = {};
imports['./ed25519_sigs.js'] = require('./ed25519_sigs.js');
const wasmModule = new WebAssembly.Module(bytes);
const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
module.exports = wasmInstance.exports;
如何访问当前wasm示例的内存缓冲区?
我试过:
import { memory } from "XXXXXX_bg";
// say o is returned as an object with the right offset() and size() accessors. It represents an Uint8Array in memory
let outU8A: Uint8Array = new Uint8Array(
memory.buffer,
o.offset(),
o.size()
);
输出是预期的大小,但每个值都是零。这让我觉得我可能试图从第二个wasm.memory示例加载?
2条答案
按热度按时间kmbjn2e31#
为了将引用从Rust发送到Javascript,我们使用
as_ptr
,它是对数据类型开头的引用。它是一个内存地址。在这个例子中,我发送了一个指向向量类型开头的引用。2你也可以写一个函数来返回向量的长度。
q5lcpyga2#
这个内存导入应该工作正常,但是我猜你试图访问释放的内存。虽然我不知道为什么释放的内存立即显示为零。
我使用静态内存创建了一个简短的工作示例:
无法访问以下代码的释放内存:
根据您的用例,您也可以在之后手动释放堆分配: