环形数组复习

普通储存数据 

 接收数据 先要有个 缓存区   通常先建立一个数组 来保存数据

缓存区内存 如何分配和释放 

此时 一包数据为 5字节   缓冲区为 17字节

方法一:每次清空缓冲区,重头开始存放数据

第一次 存放在 字节1-5 然后分析读取这次数据 后 先清除BUF  然后 第二次存放 继续存字节1-5

这种方法 6-17字节 就没有用上, 好处:寻找数据包 及解析数据会比较方便 

假设  一直判断 帧尾 有没有接收到  如果在字节5接收到帧尾  那么马上就能判断 字节1 为帧头,如果是帧头 就能去顺着解析数据。

缺点:会造成内存利用率越来越低 会有很多的内存碎片

方法二:建立环形缓冲区,内存管理更高效

        假设 第一次接收5个字节大小的数据包  先存在缓冲区的 1-5 字节   第二次又5个字节大小的数据包 存在缓冲区的 6-10字节 就不是每次清空缓存区再存放数据了

第三包 11-15   第四包  第四包的第一个字节 存放在BUF的字节16  然后依次去存放  存放到字节17之后 就开始环回到字节1 存放剩下的数据 

环形数组如何解析

首先  地址偏移量 由上图可知此时的Rev_p 为 当前数组元素  当接收完最后 一个数组元素后 判断是不是0x5c 

判断完帧尾 如何 寻找 帧头 

 第一种情况   存放在1-4字节  此时 rev_p = 4   (4+17-4)%17=0

第二种情况  存放在 16-3字节   rev_p=3(帧尾在第三字节)  (3+17-4)=16  16%17=16 所以 找到帧头就是在16个字节

数据发送: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值