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 プロジェクトをハッキングするときによくあることですが、最終的にはインクルードとソースを掘り下げることになるので、この回答は誰かにとって役立つと思います。