环形数组复习

普通储存数据 

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

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

此时 一包数据为 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个字节

数据发送: 

相关推荐

  1. PHP数组复习

    2024-07-16 23:02:04       48 阅读
  2. C++——基础复习——模拟动态数组容器

    2024-07-16 23:02:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 23:02:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 23:02:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 23:02:04       58 阅读
  4. Python语言-面向对象

    2024-07-16 23:02:04       69 阅读

热门阅读

  1. ASF平台

    ASF平台

    2024-07-16 23:02:04      21 阅读
  2. 构造器/构造方法

    2024-07-16 23:02:04       19 阅读
  3. 数据模型-NoSQL数据模型深入理解

    2024-07-16 23:02:04       21 阅读
  4. TCP网络模型

    2024-07-16 23:02:04       21 阅读
  5. 使用mediapip 检测pose 并作为一个服务

    2024-07-16 23:02:04       24 阅读
  6. 计算机图形学题库

    2024-07-16 23:02:04       19 阅读