试图让 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()在哪个里啊?

在for循环中将PFFile数组转换为UIImage返回空数组Swift

如何在 C# 中编组 wstring *?

堆的算法返回数组而不是打印