【发布时间】:2013-08-12 15:26:26
【问题描述】:
我正在使用 emscripten 生成一些 Javascript,并且试图弄清楚如何获取返回类型化数组的函数。我试图返回的数组是静态长度的,但我有点困惑如何在 JS 领域处理基于指针的返回类型。
这种包装器是做事的方式吗: How do I access the Emscripten typed array from javascript?
非常感谢。
【问题讨论】:
标签: emscripten asm.js
我正在使用 emscripten 生成一些 Javascript,并且试图弄清楚如何获取返回类型化数组的函数。我试图返回的数组是静态长度的,但我有点困惑如何在 JS 领域处理基于指针的返回类型。
这种包装器是做事的方式吗: How do I access the Emscripten typed array from javascript?
非常感谢。
【问题讨论】:
标签: emscripten asm.js
emscripten 的工作原理是为堆设置一个大的 ArrayBuffer(假设启用了类型化数组,默认情况下是启用的)。
emscripten 编译的模块包含此单个 ArrayBuffer (Module.HEAP) 和堆的许多类型化 ArrayBufferViews(Module.HEAPU8、Module.HEAPU32 等)的属性。
如果您收到一个指向连续数组开头的指针,您可以通过执行获取它所代表的数据的新视图(注意,我使用的是 HEAP8,假设这可能是一个字符数组):
var array = Module.HEAP8.subarray(ptr, ptr+number_of_elements);
另外值得注意的是,每个类型化视图都接受基于元素的参数,并且 emscripten 返回的指针将表示堆中的字节偏移量。所以同样的例子,一个 13 个整数的数组可能是:
var array = Module.HEAP32.subarray((ptr>>2), (ptr>>2)+13);
【讨论】: