Emscripten malloc和免费的JS和C++
Emscripten malloc and free across JS and C++
假设我通过Emscripten _malloc
(Javascript)在Javascript中分配一些内存M。是否允许我将M的所有权传递给对其调用free
(C++)的封送处理的C++函数?
是。在Emscripten中,malloc的C++版本被转换为Module_JavaScript中的malloc();同样是模块_free()与C++的free(。
看看这段代码,这是一段源代码在library.js中关于emscripten
free: function() {
#if ASSERTIONS == 2
Runtime.warnOnce('using stub free (reference it from C to have the real one included)');
#endif
},
正如你所看到的免费没有实现但是你可以用下面的例子免费
char *s1 = (char*) malloc ( 256 );
EM_ASM_INT ( {
return _free ( $0 );
}, s1 ) ;
目前是这样工作的这是一个完整的示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <emscripten.h>
int main ( void )
{
// ************************************** free do not free
char *s1 = (char*) malloc ( 256 );
strcpy ( s1,"Hello " ) ;
puts (s1);
free(s1);
puts(s1);
// ************************************** free do not free
char *s2 = (char* )EM_ASM_INT ( {
var p = Module._malloc(256);
setValue ( p + 0 , 65 , 'i8' ) ; // A
setValue ( p + 1 , 66 , 'i8' ) ; // B
setValue ( p + 2 , 67 , 'i8' ) ; // C
setValue ( p + 3 , 0 , 'i8' ) ;
return p ;
} , NULL );
puts(s2);
free(s2); // do not free
puts(s2);
// ************************************** _free do free
/*
EM_ASM_INT ( {
return _free ( $0 );
}, s1 ) ;
EM_ASM_INT ( {
return _free ( $0 );
}, s1 ) ;
*/
puts(s1);
puts(s2);
char * s3 = (char*) EM_ASM_INT ( {
var str = 'ciao' ;
var ret = allocate(intArrayFromString(str), 'i8', ALLOC_NORMAL);
return ret ;
}, NULL ) ;
puts( s3 ) ;
free(s3); // do not free
puts( s3 ) ;
// ************************************** _free do free
/*
EM_ASM_INT ( {
return _free ( $0 );
}, s3 ) ;
*/
puts( s3 ) ;
return 0 ;
}
相关文章:
- JS相等运算符(如===)是否可以使用embind类型
- 在 ubuntu 上安装 node js pulsar 客户端
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 如何在 Cheerp/js 中迭代动态命名的对象?
- 如何与 Cheerp/js 中的 extern 变量接口?
- 在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 使用 Node.js N-API 调用 C 函数时,不会显示预期的输出
- 将数据从 OpenCV C++传递到 NodeJS/JS |电子
- C++ - 实现JS的setTimeout的现代方法
- 节点.js HTTP 无法通过套接字接收来自C++客户端的请求
- 如何使用 v8 本机插件将 C++ 数组交付到 Node.js
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- 有没有类似的函数,比如 c++ 中的 JS Array.prototype.map?
- C++ 和 node.js 之间的 RSA 加密
- 从C++回调函数发出节点.js事件
- node.js Nan:在函数C++调用 JavaScript 回调
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中