最近我了解到V8中有“外部阵列”。因此,当您在应用程序中嵌入V8时,您可以将C数组映射到JS数组,甚至可以选择一个类型,无论是char,word,int等。这可以显着加快JS和C之间的数据交换。问题在SpiderMonkey中有类似的东西吗?
我试过谷歌“spidermonkey外部数组”,“二进制数组”,“地图数组”等等,到目前为止没有运气。
我有SpiderMonkey源代码,但要熟悉它需要很长时间。
答案 0 :(得分: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项目时经常发生这种情况,你最终会挖掘包含和来源,所以我认为这个答案可能对某些人有用。