企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
PBUF\_ROM和PBUF\_REF类型的pbuf基本是一样的,它们在内存池申请的pbuf不包含数据区域,只包含pbuf结构体,即MEMP\_PBUF类型的POOL,这也是PBUF\_ROM和PBUF\_REF与前面两种类型的pbuf最大的差别。 PBUF\_ROM类型的pbuf的数据区域存储在ROM中,是一段静态数据,而PBUF\_REF类型的pbuf的数据区域存储在RAM空间中。申请这两种类型的pbuf时候也是只需要调用memp\_malloc()函数从内存池中申请即可,申请内存的大小就是MEMP\_PBUF,它只是一个pbuf结构体大小,正确分配到的pbuf内存块示意图具体见图 6‑3。 ![](https://box.kancloud.cn/0bbb84c52ddc236db524bea6caf9dc8b_686x407.png) 最后,作者想要提醒一下大家,对于一个数据包,它可能会使用任意类型的pbuf进行描述,也可能使用多种不同的pbuf一起描述,如图 6‑4所示,就是采用多种pbuf描述一个数据包,但是无论怎么样描述,数据包的处理都是不变的,payload指向的始终是数据区域,采用链表的形式连接起来的数据包,其tot\_len字段永远是记录当前及其后续pbuf的总大小。 ![](https://box.kancloud.cn/71eb4fbe1963f4c07265806876238d69_877x583.png)