打印

包机制和内部内存管理实现(myself)

[复制链接]
155|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
车水马龙|  楼主 | 2018-9-29 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
几日颓废之后突然想到该看看我那老朋友了,于是乎,找出来看了下,有很多生词,但是还好有有道翻译,大体意思是明白了,当然生词本里也添加了不少

呵呵, 纯属个人理解!!

关于包机制我想没有什么可说的,无疑他是最有效的沟通各层之间的利器,其实表面看起来仅仅就是数据结构而已, 没什么玄妙的地方,我认为惊奇之处在于其构建在这个结构之上的内存的管理系统这真是一套完美的系统!绝了!内存管理基本上是两种一种是动态堆内存,一种是内存池内的动态分配,pbuf也不例外的有这种机构。

  总共三种结构:

第一种:RAM形式结构

第二种:ROM形式结构

第三种:POOL新式结构

第一种RAM结构表示字段数据驻留在包自己管理的连续内存中,由单向链表的NEXT链接外部的其他链表,第二种ROM字段数据表示的是不驻留在自己管理的内存中,而是指向外部的某处,当然这个其实很简单,因为有个数据起始指针字段他可以指向数据的真实存储地点,毋庸置疑的是他减小了本地缓存大小,因为只有个指针并没有和RAM类型一样的具有真实的数据域,第三种就是内存池,这种结构那就是在已经分片的内存池里面装上PBUF了,显然广义上讲是个静态结构,当然有那个最后不是静态的呢?呵呵,显然内存管理之前分配了内存池专门给这个类型的缓存开辟空间,

用途:第一种和第二中是应用程序发送数据时候的类型,ROM字段隐含着不可改变的意思,一单交给内核,将不能被改变。至少我这样理解,但是他不是ROM代码区,他也是一块内存区,这么叫罢了,我也这样认为,第三种用来接收外部数据,因为内存池速度快,可以放到中断服务程序中快速的分配快速的处理。缺点那就众所周知的浪费内存啊,还要注意RAM形式的是包含offset的,这个offsetj可以被用来存储报文的头部,哈哈。差点被忽略,ROM的就没有哦!

然后继续是字段,字段还有两个长度,分别表示当前数据包和总的数据包之间关系的字段,这个不用啰嗦,最后是FLAGE和ref,FLAGE表示类型ref引用次数,这个引用一次++,也是用来决定删除的判别标准,完了,没有这就。。。。无语



基于这种结构的内存管理呢就是第一种堆上分配,第二种内存池,综合起来的都有,已变更高效的利用内存,他有附属的一个结构,这个结构是个链表也就是内存片之间的句柄,他是个双向链表,并且加上了use标示,如果被使用就=1,没用=0,系统会检查相邻的NEXT链表指针和USE,是否被使用,如果没用就把他们合并到更大的内存块中,还有分配和释放,这些都是为这个包结构服务的,也不知道什么样的人写的代码,可以用奇葩开描述!那个人一定聪明的一塌糊涂,以至于写的代码是天书!我看的迷迷糊糊一知半解!祈祷。。。。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

474

主题

476

帖子

0

粉丝