c++ - 当将多个 TypedArrayContents 数组作为元素(数组的数组)加载到 v8 数组中时,最后一个元素会覆盖所有元素
问题描述
我正在为 node.js 编写一个 C++ 插件。我想处理大量数据并将其捆绑到一个数组数组中,以从 C++ 进程传递回 js。我了解到 NAN 提供了一个名为 TypedArrayContents 的 v8 辅助类,它允许我通过指针直接访问 v8 Float32Array。
v8::Local<Float32Array> tempHeatmap = v8::Float32Array::New(
v8::ArrayBuffer::New(isolate, 4 * DIMENSIONS), 0, DIMENSIONS);
Nan::TypedArrayContents<float> dest(tempHeatmap);
for (int i = 0; i < heatmapCollection.size(); i++) {
v8::Local<Array> sensorDataArray =
Local<Array>::Cast(parentData->Get(i + 1));
for (int a = 0; a < nodeCount; a++) {
sensorDataVec[a] = sensorDataArray->Get(a)->NumberValue();
}
for (int j = 0; j < DIMENSIONS; j++) {
float num = 0.0, denom = 0.0;
for (int k = 0; k < nodeCount; k++) {
if (heatmapGrid[j][k] == 0.0) {
}
else {
num += float(sensorDataVec[k]) / float(heatmapGrid[j][k]);
denom += 1 / float(heatmapGrid[j][k]);
}
}
(*dest)[j] = num / denom;
}
returnHeatmapCollection->Set(i, tempHeatmap);
}
returnHeatmapCollection 是一个 v8 数组,将 Float32Array 存储为元素。我可以从js端访问它没问题。
但是,returnHeatmapCollection 中的每个元素都默认为最后一个元素的后处理结果。换句话说,如果我生成 10 个 tempHeatmap,则第 10 个会通过 ->Set() 加载到 returnHeatmapArray 中的每个元素中。
为什么会出现这种情况?与默认为第一个元素相比,它的意义要小得多。但是最后一个元素覆盖所有先前元素的事实表明,每次我使用 ->Set 时,每个先前的元素都会以某种方式进行修改。怎么会这样?
解决方案
您有一个Float32Array
(在 for
循环之外声明),您将其设置为returnHeatmapCollection
. 您需要Float32Array
为每个索引创建一个新的。
推荐阅读
- amazon-s3 - 如何将流数据从 Amazon Kinesis Data Firehose 存储到 s3 存储桶
- linux - Bash 在后台运行一群两个孩子,然后杀死他们
- python - 熊猫删除前导零
- javascript - IE下拉菜单在点击时消失,需要鼠标向下
- keyboard - 蓝牙版本的向后兼容性
- pandas - 熊猫如何将数据从 df 附加到 df2
- r - prop.table() 和 dnorm() 之间的区别
- android - 我应该遵循哪些步骤在 Mac for Android 中执行环境变量?
- mysql - MySQL 中的 JOIN ON 和 WHERE 有什么区别?
- android - 无法在 Azure Dv3 VM 上启动 Android 模拟器