试图让 asm.js 返回一个类型化的数组
Posted
技术标签:
【中文标题】试图让 asm.js 返回一个类型化的数组【英文标题】:Trying to get asm.js to return a typed array 【发布时间】:2013-08-12 15:26:26 【问题描述】:我正在使用 emscripten 生成一些 javascript,并且试图弄清楚如何获取返回类型化数组的函数。我试图返回的数组是静态长度的,但我有点困惑如何在 JS 领域处理基于指针的返回类型。
这种包装器是做事的方式吗: How do I access the Emscripten typed array from javascript?
非常感谢。
【问题讨论】:
【参考方案1】: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);
【讨论】:
啊啊啊!非常感谢。通过查看输出很难了解这只野兽的内部运作。你知道那里有什么好的教程吗,或者我可以在学习的时候写一篇吗? 我对教程的方式了解不多,但订阅邮件列表是让您关注项目的好方法groups.google.com/forum/#!forum/emscripten-discuss以上是关于试图让 asm.js 返回一个类型化的数组的主要内容,如果未能解决你的问题,请参考以下文章
java里枚举类型用于返回一个数组的方法values()在哪个里啊?