小编Nai*_*Jay的帖子

如何在 Wasm 中实现“malloc”

我现在正在学习WebAssembly,发现外部函数(libc 或第三方函数)无法被 Wasm 世界轻松访问(使用 import 是通用解决方案)。

我试图用emcc编译我的源代码到WASM但mallocfree广泛应用于我的源代码。我认为从现实世界中导入malloc和导入free是不可行的。

所以,我很好奇如何malloc在 wasm 世界中实现。我已经知道 malloc 是如何工作的glibc:使用 brk() 或 sbrk() 来扩展堆和线性地址的一些内存管理。但在 wasm 世界中,我认为不可能打电话brk()sbrk()获得班轮地址。

malloc像这样使用全局变量来实现是否合理?

u_char mem[10240];


void *wasm_malloc(size_t num)
{
    /*get the free mem idx*/
    return &mem[idx];
}
Run Code Online (Sandbox Code Playgroud)

emscripten webassembly

4
推荐指数
1
解决办法
2317
查看次数

为什么两个单独的进程可以bind()到同一个TCP端口,但不能同时监听?

一个简单的 C 代码文件如下所示:

fd = socket(...)
set_reuseaddr(...)
bind(fd, 6666,...)
Run Code Online (Sandbox Code Playgroud)

该代码可以由一台机器(Linux)中的两个单独的进程运行。但是当我添加listen()这样的代码时:

fd = socket(...)
set_reuseaddr(...)
bind(fd, 6666,...)
listen(fd)
Run Code Online (Sandbox Code Playgroud)

第二个进程调用bind()失败。

首先,我还没有发现两个单独的进程bind()仅使用同一端口而不调用listen()

所以我很困惑,为什么当一个进程尝试绑定现有端口时,实现不能只返回失败,以及为什么它会延迟到listen()

sockets linux

2
推荐指数
1
解决办法
475
查看次数

标签 统计

emscripten ×1

linux ×1

sockets ×1

webassembly ×1