【问题标题】:Fast binary data exchange between JavaScript and C/C++ with SpiderMonkey JS engine使用 SpiderMonkey JS 引擎在 JavaScript 和 C/C++ 之间快速进行二进制数据交换
【发布时间】:2013-03-20 07:15:16
【问题描述】:

最近我了解到 V8 中有“外部数组”。所以当你在你的应用程序中嵌入 V8 时,你可以将你的 C 数组映射到 JS 数组,甚至可以选择一个类型,无论是 char、word、int 等。这可以显着加快 JS 和 C 之间的数据交换。现在请问SpiderMonkey中是否有类似的东西?

我在 google 上搜索了“spidermonkey 外部数组”、“二进制数组”、“地图数组”等等,但目前还没有运气。

我有 SpiderMonkey 源代码,但需要很长时间才能熟悉它。

【问题讨论】:

标签: spidermonkey


【解决方案1】:

在 SpiderMonkey 中,您可以使用 ArrayBuffer。

var buffer = new ArrayBuffer(16)
var int32View = new Int32Array(buffer);
for (var i = 0; i < int32View.length; i++) {
  int32View[i] = i * 3
}
array_dump(buffer)

现在是 C++ 部分:

#include "js/jstypedarray.h"

static JSBool my_array_dump(JSContext *cx, uintN argc, jsval *vp) {
    JSObject *obj;
    JS_ValueToObject(cx, vp[0 + 2], &obj);
    js::ArrayBuffer *A;
    A = js::ArrayBuffer::fromJSObject(obj);
    int *B = (int*) A->data;
    for (int i = 0; i < A->byteLength / 4; i++) printf("%i ", B[i]);
    return JS_TRUE;
}

似乎通过这种方式,您可以在 JS 和 C/C++ 之间传递大量数据,而且几乎没有开销。

当然,最好在 SpiderMonkey 文档中清楚地解释这一点。但是,当您侵入 Mozilla 项目时,通常会发生这种情况,最终您最终会挖掘包含和来源,所以我认为这个答案可能对某人有用。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2017-09-07
    相关资源
    最近更新 更多