0

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

我尝试用谷歌搜索“spidermonkey 外部数组”、“二进制数组”、“地图数组”等等,但到目前为止还没有运气。

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

4

1 回答 1

3

在 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 项目时,经常会发生这种情况,您最终会挖掘包含和来源,所以我认为这个答案可能对某些人有用。

于 2013-03-21T08:31:26.833 回答