0

最近、V8 に「外部アレイ」があることを知りました。したがって、V8 をアプリに埋め込むと、C 配列を JS 配列にマップし、char、word、int などの型を選択することもできます。これにより、JS と C 間のデータ交換が大幅に高速化されます。質問 SpiderMonkey にそのようなものはありますか?

「spidermonkey 外部配列」、「バイナリ配列」、「マップ配列」などについて Google を試しましたが、今のところうまくいきません。

私は 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 に答える