emscripten:如何删除在 C++ 代码中分配的 std::vector 内存
emscripten: How to delete memory of std::vector allocated in C++ code
我想知道如何正确删除在 c++ 代码中分配并作为函数 return 传递给 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));
}
}
以上无限循环中止 Cannot enlarge memory arrays.
但是 v.delete()
在循环结束时,这个程序不会停止。
我想知道如何正确删除在 c++ 代码中分配并作为函数 return 传递给 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));
}
}
以上无限循环中止 Cannot enlarge memory arrays.
但是 v.delete()
在循环结束时,这个程序不会停止。