试图让asm.js返回一个类型化的数组

时间:2013-08-12 15:26:26

标签: emscripten asm.js

我正在使用emscripten生成一些Javascript,我试图弄清楚如何获得返回类型化数组的函数。我试图返回的数组是静态长度,但我有点困惑如何在JS域中处理基于指针的返回类型。

这种包装是否是做事的方式: How do I access the Emscripten typed array from javascript?

非常感谢。

1 个答案:

答案 0 :(得分:5)

emscripten通过为堆提供一个大型ArrayBuffer来工作(假设已启用类型化数组,默认情况下它们是这样)。

模块emscripten compiles包含此单个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);
相关问题