javascript - emscripten:如何删除 C++ 代码中分配的 std::vector 内存

标签 javascript google-chrome v8 emscripten asm.js

我想知道如何正确删除在c++代码中分配并作为函数返回传递给js的std::vector内存。

我的C++代码是

#include <vector>
#include <emscripten/bind.h>

using namespace emscripten;

std::vector<int> intArrayToVector(uintptr_t input, int num){
std::vector<int> vec;
const int* ptr = reinterpret_cast<int*>(input);
for(int i=0; i<num; i++){
    int val = *(ptr+i);
    vec.push_back(val);
}
return vec;
}

EMSCRIPTEN_BINDINGS(test){
register_vector<int>("VectorInt");
function("intArrayToVector", &intArrayToVector, allow_raw_pointer<arg<0>>());  
}

我的html代码是

<html>
<body>
 <script src="test.js"></script>
 <script>
   var num = 6;
   var buf = Module._malloc(100);
   var arr = new Int8Array(num);
   for(var i=0; i<num; i++){
      arr[i] = i+2;
   }
Module.HEAP8.set(arr, buf);
var v = Module.intArrayToVector(buf, num);

for(var i=0; i<num; i++){
    console.log(v.get(i));
}
Module._free(buf);

v.resize(0, 0);
v.delete();  
v = {};
</script>
</body>
</html>

我尝试使用以下代码来删除分配的内存,但没有任何反应。

v.resize(0, 0);
v.delete();  
v = {};

最佳答案

我认为v.delete()有效。

for (var j = 0;; j++) {
    var v = Module.intArrayToVector(buf, num);

    for(var i=0; i<num; i++){
        console.log(v.get(i));
    }
}

上述无限循环因无法扩大内存数组而中止。

但是在循环结束时使用v.delete(),该程序不会停止。

关于javascript - emscripten:如何删除 C++ 代码中分配的 std::vector 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439454/

相关文章:

google-chrome - 如何从 Google Chrome 扩展程序获取当前选项卡的 URL?

Python Web 浏览器引擎

c++ - 如何在没有 OO 的情况下关联值(value)和功能

javascript - react Prop : Unable to access key in object in array with index both passed with props

javascript - 如何将html内容解析为带格式的文本文件?

Javascript OAuth 和 Opera 链接

使用 Object.create 创建的 Javascript 数组 - 不是真正的数组?

node.js 缺少使用 `V8: Isolates`

javascript - 如何获取 TouchSwipe 事件目标

javascript - 后退按钮背后的逻辑