【发布时间】:2019-07-15 02:14:07
【问题描述】:
我现在正在学习WebAssembly,我发现Wasm 世界无法轻松访问外部函数(libc 或第三方函数)(使用导入是通用解决方案)。
我正在尝试使用emcc 将我的源代码编译成wasm,但malloc 和free 在我的源代码中被广泛使用。我认为从现实世界导入malloc 和free 是不可行的。
所以,我很好奇如何在 wasm 世界中实现 malloc。我已经知道 malloc 在glibc 中是如何工作的:使用 brk() 或 sbrk() 来扩展堆和一些用于衬里地址的内存管理。但在 wasm 世界中,我认为不可能调用 brk() 或 sbrk() 来获取班轮地址。
这样使用全局var来实现malloc合理吗?
u_char mem[10240];
void *wasm_malloc(size_t num)
{
/*get the free mem idx*/
return &mem[idx];
}
【问题讨论】: