推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

libevent的evbuffer_add_reference引用而不复制的智慧.docx

更新时间:2026-10-09 20:29:23 大小:37K 上传用户:江岚查看TA发布的资源 标签:libeventevbuffer_add_reference零拷贝网络编程内存引用 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

libevent 的 evbuffer_add_reference:引用而不复制的智慧

大数据的拷贝代价

在网络编程里,经常要把一块数据加入发送缓冲。如果用复制的方式(evbuffer_add),数据会被拷贝一份,占用时间和内存。对大数据或频繁操作,拷贝开销很大。

libevent 提供了 evbuffer_add_reference,用"引用"代替"复制",把一块已存在的内存直接挂进缓冲,避免拷贝。这篇文章讲这个机制。

evbuffer_add_reference 的作用

evbuffer_add_reference 把一块内存"引用"进缓冲,而不复制。

它记录这段内存的地址和长度,把它作为一个引用链节点挂进 evbuffer。数据不拷贝,只是"借用"了这块内存。

这样,拼接大包时没有额外的数据拷贝,节省时间和内存。

引用 vs 复制

evbuffer_add(复制)和 evbuffer_add_reference(引用)的区别。

复制:把数据拷贝到 evbuffer 自己的内存,之后可以修改或释放原数据。

引用:只记录数据地址,不拷贝,之后不能修改或过早释放原数据,直到引用被解除。

选择哪种,看数据的生命周期需求。需要拷贝独立使用,用 add;借用已有内存避免拷贝,用 add_reference。


部分文件列表

文件名 大小
libevent的evbuffer_add_reference引用而不复制的智慧.docx 37K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载