从 C++ 填充 Node v8 Float32Array
Populating a Node v8 Float32Array from C++
我查看了文档:
我正在尝试使用 thrust::host_vectofr<float>
填充 v8 浮点数组,其中 dataset[i].vector = thrust::host_vector<float>
使用数组,似乎四舍五入为整数:
Local<Object> obj = Object::New(isolate);
Local<Array> vec = Array::New(isolate, dataset[i].vector.size());
// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
vec->Set(k, Number::New(isolate, dataset[i].vector[k]));
obj->Set(String::NewFromUtf8(isolate, "vector"), vec);
使用 typed 数组,Float32Array
:
Local<Object> obj = Object::New(isolate);
auto vec = Float32Array::New(ArrayBuffer::New(isolate, sizeof(float)), 0, dataset[i].vector.size());
// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
vec->Set(k, Number::New(isolate, dataset[i].vector[k]));
obj->Set(String::NewFromUtf8(isolate, "vector"), vec);
编译正常,但执行时崩溃:
*** Error in `node': corrupted double-linked list: 0x000000000734bf50 ***
fish: “node run.js” terminated by signal SIGABRT (Abort)
从 C++ 分配然后填充 v8 Float32Array 的正确 方法是什么,以便它可以在 JavaScript 中使用?
我也知道 Node.JS/v8 没有 float
?
我不确定 V8 是什么版本(在我看到的 API 文档中没有调用没有上下文的 Set),但是在 4.10 上,这工作正常:
auto arr = v8::Array::New(isolate);
(void)arr->Set(context, 0, v8::Number::New(isolate, 2.5));
auto number = arr->Get(context, 0);
printf("%s\n", *v8::String::Utf8Value(number.ToLocalChecked()));
打印出来
2.5
将其转换为浮点值也有效:
printf("%f\n", ((v8::Number*)*number.ToLocalChecked())->Value());
我查看了文档:
我正在尝试使用 thrust::host_vectofr<float>
填充 v8 浮点数组,其中 dataset[i].vector = thrust::host_vector<float>
使用数组,似乎四舍五入为整数:
Local<Object> obj = Object::New(isolate);
Local<Array> vec = Array::New(isolate, dataset[i].vector.size());
// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
vec->Set(k, Number::New(isolate, dataset[i].vector[k]));
obj->Set(String::NewFromUtf8(isolate, "vector"), vec);
使用 typed 数组,Float32Array
:
Local<Object> obj = Object::New(isolate);
auto vec = Float32Array::New(ArrayBuffer::New(isolate, sizeof(float)), 0, dataset[i].vector.size());
// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
vec->Set(k, Number::New(isolate, dataset[i].vector[k]));
obj->Set(String::NewFromUtf8(isolate, "vector"), vec);
编译正常,但执行时崩溃:
*** Error in `node': corrupted double-linked list: 0x000000000734bf50 ***
fish: “node run.js” terminated by signal SIGABRT (Abort)
从 C++ 分配然后填充 v8 Float32Array 的正确 方法是什么,以便它可以在 JavaScript 中使用?
我也知道 Node.JS/v8 没有 float
?
我不确定 V8 是什么版本(在我看到的 API 文档中没有调用没有上下文的 Set),但是在 4.10 上,这工作正常:
auto arr = v8::Array::New(isolate);
(void)arr->Set(context, 0, v8::Number::New(isolate, 2.5));
auto number = arr->Get(context, 0);
printf("%s\n", *v8::String::Utf8Value(number.ToLocalChecked()));
打印出来
2.5
将其转换为浮点值也有效:
printf("%f\n", ((v8::Number*)*number.ToLocalChecked())->Value());