关于C#:libuv读取回调uv_buf_t清理

libuv read callback uv_buf_t cleanup

libuv读取完成回调的签名为:

void (*uv_read_cb)(uv_stream_t*stream, ssize_tnread, const uv_buf_t*buf)

我从文档中了解到,我的回调负责释放提供的uv_buf_t*的基本成员。 我的问题是-谁负责释放buf指向的内存?


考虑内部功能uv__read。 这是您的回调被调用的地方(预留uv__stream_eof对此问题没有太大的兴趣)。
正如您在函数的第一行看到的那样,缓冲区被声明并定义为局部变量:

1
uv_buf_t buf;

如果遍历整个函数,则可以看到uv_buf_init使用了相同的缓冲区,然后将其传递给回调(如果需要更多详细信息,请参见此处,此处,此处,此处和此处)。
因此,回到问题所在:

who is responsible for freeing the memory pointed to by buf?

你和libuv都没有。 当缓冲区超出范围时,它将自动释放。 您不必担心,文档也很清楚:您对base数据成员的唯一责任。