【问题标题】:Trying to get asm.js to return a typed array试图让 asm.js 返回一个类型化的数组
【发布时间】:2013-08-12 15:26:26
【问题描述】:

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

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

非常感谢。

【问题讨论】:

    标签: emscripten asm.js


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2018-05-09
    • 2019-03-12
    • 2023-03-29
    • 2017-12-14
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多