【发布时间】:2016-06-28 16:20:53
【问题描述】:
考虑 libuv 的官方 documentation(其他实用程序部分)。
这是uv_buf_init的声明:
uv_buf_t uv_buf_init(char* base, unsigned int len)
文档指出(强调我的):
uv_buf_t 的构造函数。
由于平台差异,用户不能依赖 uv_buf_t 结构的 base 和 len 成员的顺序。 uv_buf_t 完成后用户负责释放基地。按值传递的返回结构。
在我看来,base 可以在调用 uv_buf_init 后立即被释放。
另一方面,uv_buf_t 结构 is documented 由两个字段组成:base,类型为 char *,len,类型为 size_t。
我不清楚的是:
数据是否复制到缓冲区中? (好吧,我想答案是否定的,因为这会在性能方面造成很大的损失)。
我应该在调用
uv_try_write或其他*_write函数后释放数据吗?也就是说,一旦数据确实被实际消费了。
【问题讨论】:
-
你应该使用 valgrind 来检查,如果文档不够,也可以阅读源代码。此外,实际存储位置的平台差异对我来说似乎无关紧要。
-
@self 阅读源代码,是的:文档不足(确实很糟糕)。