Libevent之evbuffer详解_有时需要偏执狂的博客-CSDN博客

日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)_yun6853992的博客-CSDN博客

缓冲区由evbuffer和evbuffer_chain组成,其中evbuffer_chain是真正存储数据的一块内存,通过链表将一个一个的evbuffer_chain连接在一起,组成内存池。而通过evbuffer结构体就可以管理这个内存池链表了。所以结果如下图:  多级缓冲

Libevent将缓冲数据都存放到buffer中。通过一个个的evbuffer_chain连成的链表可以存放很多的缓冲数据。
Libevent有一个很独特的地方,就是那个evbuffer_chain结构体。
1、该结构体有misalign成员。该成员表示错开不用的buffer空间。也就是说buffer中真正的数据是从buffer + misalign开始。
2、evbuffer_chain结构体buffer是一个指针,按道理来说,应该单独调用malloc分配一个堆内存并让buffer指向之。但实际上buffer指向的内存和evbuffer_chain结构体本身的存储内存是一起分配的。

buffer内存区域(蓝色区域)连在next的后面也是基于这一点的。在代码的while循环中也可以看到申请的空间大小是512的倍数,也就是说evbuffer_chain申请的空间大小是512、1024、2048、4096等等。
函数evbuffer_chain_new,该函数是用来创建一个evbuffer_chain。现在贴出另外一个函数evbuffer_new,它是用来创建一个evbuffer

ringbuff进阶 evbuffer相关推荐

  1. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  2. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  3. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

  4. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  5. 一个java高级工程师的进阶之路【转】

    一个java高级工程师的进阶之路[转] 宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) ...

  6. SQL Server Extended Events 进阶 3:使用Extended Events UI

    开始采用Extended Events 最大的阻碍之一是需要使用Xquery和XML知识用来分析数据.创建和运行会话可以用T-SQL完成,但是无论使用什么目标,数据都会被转换为XML.这个限制在SQL ...

  7. 《OpenCV3编程入门》学习笔记5 Core组件进阶(六)输入输出XML和YAML文件

    第5章 Core组件进阶 5.6 输入输出XML和YAML文件 5.6.1 XML和YAML文件 XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML式的文件存储和还原各种数据结构,还 ...

  8. 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)

    第5章 Core组件进阶 5.5 离散傅里叶变换(Discrete Fourier Transform,DFT) 5.5.1 离散傅里叶变换原理 1.对一张图像使用傅里叶变换就是把它分解成正弦和余弦, ...

  9. 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整

    第5章 Core组件进阶 5.4 图像对比度.亮度值调整 5.4.1 理论依据 1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像 2.算子一般形式: 3.点操作(poin ...

最新文章

  1. 面试官问:Integer 如何实现节约内存和提升性能的?
  2. 如何重新划分swap分区
  3. 依图科技终止上市审核:冲击科创板「AI第一股」失败
  4. Spring+Quartz实现定时任务的配置方法
  5. 为在innodb中什么主键用auto_increment效率会提高
  6. mysql 中文 length_mysql length()中文长度一些问题整理
  7. a java_java程序弹出a java exception has occurred
  8. boost::geometry::util::calculation_type用法的测试程序
  9. (2.15)备份与还原--使用作业备份、清理过期备份、清理历史记录、事务日志是否备份过...
  10. __attribute__((always_inline))
  11. Python基础学习笔记之(一)
  12. Java线程栈的获取和分析
  13. [渝粤教育] 云南大学 大学生创新创业教育 参考 资料
  14. 各GIS软件添加天地图方式
  15. 引擎开发五: Assimp库及使用
  16. 海外邮件收发阻碍多?网易企业邮箱为您保驾护航【网易企业邮箱怎么申请】
  17. 数据上链——区块链相关概念
  18. FOne HCI超融合系统
  19. 更新xcode 12.51时提示空间不足,以及macos的空间清理
  20. 如何批量OCR识别各类票据关键信息,导出为结构化格式数据

热门文章

  1. 从开发者的角度,如何看待提高软件质量
  2. 启用数据空间:让VirtualBox虚拟机中的Ubuntu10.10和XP主机互通有无
  3. android 6.0开机后自动播放U盘视频
  4. 海外专利紧缺 中国IT企业国际化维艰
  5. Stm32嵌入式电子相册简易实现
  6. QCustomplot之安装篇(一)
  7. Linux系统及应用复习题
  8. 金蝶KIS记账王增加3级明细科目的方法
  9. 高桥盾react和boost_热门对比丨React pk Boost,你更偏向哪一双?
  10. Java开源企业信息化平台O2OA服务器架构示意图