当前位置: 首页 > news >正文

什么是ring buffer?

1、什么是ring buffer?

环形缓冲区(ring buffer),是一种基于数组的循环队列。其特点是首尾相连,形成一个环状结构。

ring buffer包含两个主要的指针(head、tail):

  • head指针:指向队列的第一个有效数据的位置。
  • tail指针:指向队列的下一个可写入的位置。(当tail指针到达数组的末尾时,它会绕到数组的开头继续写入,从而形成一个环形)

2、代码实现(C语言)

(缺点:下述代码,未实现overwrite,即当缓存区满时,覆盖旧数据)

#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>typedef struct {uint8_t *buffer;size_t head;size_t tail;size_t size;bool full;
} ringbuffer_t;/*** Initialize&&Free ringbuffer*/
void ringbuffer_init(ringbuffer_t *rb, size_t size){if(rb == NULL || size == 0){return;}rb->buffer = (uint8_t *)malloc(size);if(rb->buffer == NULL){// malloc errorreturn;}rb->head = 0;rb->tail = 0;rb->size = size;rb->full = false;
}void ringbuffer_free(ringbuffer_t *rb){free(rb->buffer);
}/*** Get ringbuffer status*/
bool ringbuffer_is_full(const ringbuffer_t *rb){return rb->full;
}bool ringbuffer_is_empty(const ringbuffer_t *rb){return (!rb->full&&(rb->head == rb->tail));
}size_t ringbuffer_available_data(const ringbuffer_t *rb){if(rb->full){return rb->size;}return (rb->head >= rb->tail) ? (rb->head-rb->tail) : (rb->size-rb->tail+rb->head);
}size_t ringbuffer_available_space(const ringbuffer_t *rb){return rb->size - ringbuffer_available_data(rb);
}/*** Write&&Read ringbuffer*/
void ringbuffer_write(ringbuffer_t *rb, const uint8_t *data, size_t len){if(len > ringbuffer_available_space(rb)) {return;}for(size_t i=0; i<len; i++) {rb->buffer[rb->head] = data[i];rb->head = (rb->head+1) % rb->size;}if(rb->head == rb->tail) {rb->full = true;}
}void ringbuffer_read(ringbuffer_t *rb, uint8_t *data, size_t len){if(len > ringbuffer_available_data(rb)) {return;}for(size_t i=0; i<len; i++) {data[i] = rb->buffer[rb->tail];rb->tail = (rb->tail+1) % rb->size;}rb->full = false;
}

3、测试代码(C语言)

#include <stdio.h>
#include "ringbuffer.c"int main() {ringbuffer_t buffer;ringbuffer_init(&buffer, 10);printf("Available space: %zu\n", ringbuffer_available_space(&buffer));printf("Available data: %zu\n", ringbuffer_available_data(&buffer));//writeuint8_t write_data[] = {1, 2, 3, 4, 5};printf("\nWriting data: ");for(int i = 0; i < 5; i++) {printf("%d ", write_data[i]);}printf("\n");ringbuffer_write(&buffer, write_data, 5);printf("After writing - Available data: %zu, Available space: %zu\n", ringbuffer_available_data(&buffer), ringbuffer_available_space(&buffer));//readuint8_t read_data[5];
ringbuffer__read(&buffer, read_data, 3);
printf(
"Read 3 bytes: ");for(int i = 0; i < 3; i++) {printf("%d ", read_data[i]);}printf("\n");

printf(
"Final - Available data: %zu, Available space: %zu\n", ringbuffer_available_data(&buffer), ringbuffer_available_space(&buffer));ringbuffer_free(&buffer);return 0; }
~/workspace$ gcc -o test main.c 
~/workspace$ ./test 
Available space: 10
Available data: 0Writing data: 1 2 3 4 5 
After writing - Available data: 5, Available space: 5
Read 3 bytes: 1 2 3 
Final - Available data: 2, Available space: 8

 

参考文献:

https://zhuanlan.zhihu.com/p/712832676

https://zhuanlan.zhihu.com/p/25730907114

 

http://www.jsqmd.com/news/313329/

相关文章:

  • 从 Git 跟踪中移除文件 - r1
  • 莆田市英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜单
  • 莆田市英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜单
  • 寒假第八天
  • 业务架构、资料架构、应用架构和技术架构
  • 莆田市英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜单
  • 2026国内最新环保胶供货商top5推荐!优质环保胶品牌权威榜单发布,零甲醛安全守护家居健康
  • 熔锌设备行业领军企业推荐指南
  • 453345345
  • Comsol搭建电力变压器匝间故障计算模型:探索电磁场与电路的奥秘
  • Spring Boot 集成 Sa-Token:权限认证从未如此简单!
  • Sa-Token 详细配置指南:从入门到生产环境最佳实践!
  • Sa-Token 如何忽略鉴权?三种方式让你灵活放行接口!
  • 基于 Dify + 大模型(LLM)+ 智能体(Agent) 手把手从0-1构建私有化智能助手
  • 大模型新书丨Large Language Models: A Deep Dive,终于有一本全面且基础的大语言模型LLM入门教程书了
  • 随着大模型技术的发展——RAG技术有可能会被淘汰吗?
  • 大模型时代,智能体崛起:从技术解构到工程落地的全栈指南 ——《大模型技术30讲》
  • 智慧渔业无人机视角航拍非法捕鱼禁止捕鱼行为检测数据集VOC+YOLO格式1227张3类别
  • 4513451354
  • 【Android毕设全套源码+文档】基于android的高校教室预约管理平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 全自动立式搅拌机供应商推荐:选择合作伙伴的五大黄金法则
  • 用Notion管理测试用例?2026年高阶测试员都在用
  • 泉州市英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜单
  • 漳州市英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜单
  • 绩效考核的9大好处
  • 泉州市英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜单
  • 泉州市英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜单
  • 智能革命:机床商务网如何用AI重构工业采购生态?
  • NMN哪款见效快NMN体感最好?2026年美容口服抗衰十大保健NMN以及护肤品牌揭榜
  • 行业内专业的抗撕裂聚氨酯包胶轮生产厂家权威推荐: