10 指令环形缓冲区

环形缓冲区是一种逻辑上的环状结构,用于实现FIFO(先进先出)的数据管理。它由一段内存空间、读指针和写指针组成,支持多进程的互斥访问。文章详细介绍了如何创建、初始化、使用及释放环形缓冲区,包括动态内存的分配和释放过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环形缓冲区

环形缓冲区(ring buffer)也称作循环缓冲区(cyclic buffer)、圆形队列(circular queue)、圆形缓冲区(circular buffer)。环形缓冲区并不是指物理意义上的一个首尾相连成“环”的缓冲区,而是逻辑意义上的一个环,因为内存空间是线性结构,所以实际上环形缓冲区仍是一段有长度的内存空间,是一个先进先出功能的缓冲区,具备实现通信进程对该缓冲区的互斥访问功能。

Step1:创建一个长度为Len(环形缓冲区大小)的容器
Steo2:创建一个读指针Read_p与写指针Write_p,写指针写入的地址为Write_p = (Write_p + W_len(写入数据长度))%Len
Step3:根据读指针进行读取缓冲区数据

带有指针的结构体内存大小分配

typedef struct Ring_buffer {
    char **log;
    int index;
    int buffer_size;
}Ring_buffer;

分配

在分配时先分配给Ring_buffer,再分配给Ring_buffer中的log.代码如下所示:
void InitRingBuffer(Ring_buffer* buffer, int buffer_size) {
	buffer -> log = (char**)malloc(buffer_size * sizeof(char*));
    for(int i = 0; i < buffer_size; i++) {
        buffer -> log[i] = (char *)malloc(Ring_char_max * sizeof(char));
    }
    buffer -> index = 0;
    buffer -> buffer_size = buffer_size;
}

释放

与分配的顺序相反,代码如下所示:

void FreeRingBuffer(Ring_buffer* buffer) {
    for(int i = 0; i < buffer -> index; i++) {
        free(buffer -> log[i]);
    }
    free(buffer -> log);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值