【随手笔记】环形缓冲区之覆盖读写

DRAM架构演进与HBM技术在高性能计算中的应用 DRAM(动态随机存取存储器)是现代计算系统中关键的内存技术,其架构优化直接影响数据供给能力。随着AI训练和科学计算等数据密集型负载的普及,传统DDR架构面临带宽墙、能效比和访问粒度等挑战。HBM(高带宽内存)通过3D堆叠技术(如TSV硅通孔)和异构集成(如PIM存内计算)显著提升了带宽和能效比。这些技术在高性能计算、AI推理和大模型训练等场景中展现出巨大潜力,例如HBM3的带宽可达819GB/s,能效比低至0.95pJ/b。未来,DRAM技术将继续向更高密度、更低功耗和更智能的内存计算方向发展。 阅读详情

实现环形缓冲区(循环队列)的 C 语言程序,
支持覆盖读写的功能。
环形缓冲区通常用于实现生产者-消费者模型或者数据流处理。
以下是一个简单的示例代码:

#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 10

// 定义环形缓冲区结构体
typedef struct {
    int *buffer;  // 缓冲区数组指针
    int size;     // 缓冲区大小
    int head;     // 头部指针,指向下一个要写入的位置
    int tail;     // 尾部指针,指向下一个要读取的位置
} CircularBuffer;

// 初始化环形缓冲区
void initCircularBuffer(CircularBuffer *cb) {
    cb->buffer = (int *)malloc(BUFFER_SIZE * sizeof(int));
    cb->size = BUFFER_SIZE;
    cb->head = 0;
    cb->tail = 0;
}

// 写入数据到环形缓冲区
void writeCircularBuffer(CircularBuffer *cb, int data) {
    cb->buffer[cb->head] = data;
    cb->head = (cb->head + 1) % cb->size;  // 更新头部指针,实现环形特性
    if (cb->head == cb->tail) {
        cb->tail = (cb->tail + 1) % cb->size;  // 如果头部追上尾部,尾部指针后移(覆盖最老的数据)
    }
}

// 从环形缓冲区读取数据
int readCircularBuffer(CircularBuffer *cb) {
    if (cb->head == cb->tail) {
        printf("Buffer is empty.\n");
        return -1;
    }
    int data = cb->buffer[cb->tail];
    cb->tail = (cb->tail + 1) % cb->size;  // 更新尾部指针
    return data;
}

// 释放环形缓冲区内存
void freeCircularBuffer(CircularBuffer *cb) {
    free(cb->buffer);
}

int main() {
    CircularBuffer cb;
    initCircularBuffer(&cb);

    // 写入数据到环形缓冲区
    writeCircularBuffer(&cb, 1);
    writeCircularBuffer(&cb, 2);
    writeCircularBuffer(&cb, 3);

    // 读取数据并打印
    printf("Read: %d\n", readCircularBuffer(&cb));
    printf("Read: %d\n", readCircularBuffer(&cb));

    // 再次写入数据
    writeCircularBuffer(&cb, 4);

    // 读取数据并打印
    printf("Read: %d\n", readCircularBuffer(&cb));
    printf("Read: %d\n", readCircularBuffer(&cb));

    freeCircularBuffer(&cb);
    return 0;
}

在这个示例中,我们定义了一个 CircularBuffer 结构体来表示环形缓冲区。i nitCircularBuffer 函数用于初始化环形缓冲区,
writeCircularBuffer 函数用于向缓冲区写入数据,
并实现了覆盖写功能,即当头部指针追上尾部指针时,尾部指针向后移动。
readCircularBuffer 函数用于从缓冲区读取数据,并更新尾部指针。

在 main 函数中,我们展示了如何使用这些函数来进行数据的写入和读取,并演示了当缓冲区满时如何覆盖写入最老的数据。

[DDR5]DDR5 SDRAM 状态图 和 基本功能 DDR5 SDRAM的读写操作以突发(burst mode)为导向,从选定的位置开始,并按照编程顺序进行16个突发长度或8个“切片”突发长度的操作。从ACTIVATE命令开始,然后是读取或写入命令。 阅读详情

相关推荐

UE5导入MetaHuman虚拟头像后,连接live link face,面部表情捕捉出错修正

UE5 利用live link face 驱动meta human面部表情捕捉

m0_53122690的博客 6595

2021 NLP技术路标:大模型平民化与可解释性实践

大语言模型(LLM)正从封闭研发走向开放协作,其核心挑战已从单纯提升参数规模,转向数据可及性、训练可复现性与推理可解释性。Mesh TensorFlow等分布式框架降低了千卡级训练门槛,The Pile等开源数据集推动语料透明化,而Transformers Interpret、NoiseQA等工具则将模型决策过程转化为可审计的归因信号和鲁棒性指标。这些技术共同构成现代NLP工程基础设施的关键分层:底层是并行训练与资源调度,中层是任务建模与评估标准化,上层是用户可感知的可信输出。本文聚焦2021年关键开源实践

cuizhu0832的博客 431

雷达信号处理中的CLEAN算法实现与优化

在信号处理领域,杂波抑制是提升目标检测性能的关键技术。CLEAN算法作为一种迭代去卷积方法,通过逐步提取最强信号分量并消除其影响,有效解决了传统方法在复杂环境下的局限性。该算法结合自适应阈值和噪声基底估计,显著提高了雷达信号处理的精度和鲁棒性。在工程实践中,CLEAN算法广泛应用于气象雷达、地物杂波抑制等场景,通过Matlab仿真可以快速验证算法性能并优化参数设置。本文重点探讨了CLEAN算法在雷达信号处理中的实现细节和优化技巧,包括距离徙动补偿、多普勒补偿等关键技术。

weixin_32430941的博客 264

圆形缓冲区

圆形缓冲区(circular buffer),也称作圆形队列(circular queue),循环缓冲区(cyclic buffer),环形缓冲区(ring buffer),是一种数据结构用于表示一个固定尺寸、头尾相连的缓冲区,适合缓存数据流。 目录   [隐藏]  1 用法2 工作过程3 圆形缓冲区工作机制 3.1 读指针与写指针3.2 区分缓冲区满或者空

weed_hz的专栏 3094

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2021

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1795

环形缓冲区简单实现

针对环形缓存区概念和特点进行了简述,同时利用C语言实现了环形缓冲区的基本功能

zHzAim的博客 2666

pe卸载win10更新补丁_禁用Win10系统更新

众所周知,最近WIN10的强制更新导致了很多问题。如:(部分专业软件系统更新后无法使用,硬件中键盘、鼠标、指纹之类的硬件,更新补丁后失灵等问题)。而之前的禁用WindowsUpdate的方法已经失效。下面我们另辟蹊径,利用系统权限的方法使Win10无法更新,达到禁用更新的目的。1.计算机管理-服务中禁用Windows Update服务。2.打开C:\Windows\softwareDistribu...

weixin_39702479的博客 1万+

循环队列简介

背景 循环队列的出现是为了克服普通队列存在“假溢出”的现象,将存储空间想象成一个首位相接的圆环,当写指针写到末尾后重新从首部写入。由于存储空间有限,当设计循环队列时,需要考虑队满的情况,通常循环队列在队满时都是丢弃新数据,不再写入,但对于比如像实时信号采集系统,就需要覆盖旧数据,所以在设计时首先应该考虑该循环队列队满时是丢弃新数据还是覆盖旧数据,另外,对于丢弃新数据,通常也有三种实现方式,包括引入flag标记法、牺牲一个存储单元法和引入数据元素计数法。下面以C++模板方式简单对4种方式进行介绍。 队满时覆盖

jack_feng 3551

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

【机器学习与数据挖掘实战 | 医疗】案例18:基于Apriori算法的中医证型关联规则分析

本案例针对三阴乳腺癌患者,经问卷调查收集数据并筛选处理形成原数据,经清洗、特征选择与变换后,构建Apriori模型,基于业务理解与建模结果,分析患者症状与中医证型关联,并据症状给出建议 。

Morse_Chen的博客 1380

ring buffer简单原理及c代码实现

环形存储(ring buffer):一个头尾相连的buffer,根据head索引确定写入位置,根据tail索引确定读出位置,读写时head、tail索引各自递增,不够空间且有新数据要写入时,覆盖旧数据。 下图演示了创建/初始化长度12、写4bytes数据、读2bytes数据时,ring buffer的head、tail索引变化情况。 //因此使用ring buffer关键因素是数据缓冲区、数据缓冲区长度、head索引、tail索引 typedef struct { char *buff;

strengthen2324的博客 2961

大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析

通义千问大模型是阿里巴巴云推出的一款大规模语言模型,旨在通过强大的自然语言处理能力提供更广泛的服务。从最初的构想到如今的广泛应用,通义千问的发展见证了人工智能领域尤其是自然语言处理技术的巨大进步。自发布以来,通义千问不断迭代升级,不仅在规模上实现了飞跃式的增长,在性能方面也得到了显著提升。本次研究尝试将通义千问强大的自然语言处理能力与经典的时间序列预测算法相结合,旨在提高对未来天气状况预测的精度。具体来说,首先使用通义千问生成高质量的文字描述来增强特征表达力;

微学AI的博客 935

队列、循环队列、双端队列详解(含完整代码)

队列是一种操作受限的线性表。只允许在表的一端进行插入,在表的另一端进行删除。和日常生活中的队列一样 先入队的元素优先出队,即先进先出。

m0_60284144的博客 3320

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

嵌入式开发实战:50个核心模块、低功耗设计与调试优化全解析

嵌入式系统开发涉及从微控制器(MCU)到嵌入式Linux的广泛技术栈,其核心在于对硬件资源的直接管理和对实时性的严格保障。理解其工作原理,如中断处理、内存访问和外设驱动,是构建稳定系统的基石。这些技术的工程价值在于实现高性能、低功耗与高可靠性的产品,广泛应用于物联网节点、工业控制和消费电子等领域。本文聚焦于嵌入式实战中的关键模块,例如通过状态机框架管理复杂逻辑以提升代码可维护性,并深入探讨了基于DMA的双缓冲机制实现高效串口通信,从而优化系统性能。这些经过验证的解决方案,旨在为开发者提供从驱动封装到系统优化

weixin_34315485的博客 344

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[数据结构-1]:环形buffer以及读写同步

环形缓冲区(Circular Buffer)也被称为环形队列(Circular Queue)或循环缓冲区,是一种数据结构,用于在固定大小的缓冲区中存储和处理数据。环形缓冲区的特点是首尾相连,即缓冲区的最后一个元素和第一个元素相邻。当缓冲区写满时,新数据可以覆盖旧数据,实现循环利用。环形缓冲区常见的应用场景是数据流处理,例如音频、视频、网络通信等。内存利用率高:由于循环利用,不会浪费内存空间。读写效率高:读写指针移动固定步长,无需频繁移动指针或进行数据搬移操作。

文火冰糖(王文兵)的博客 3073

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据结构——循环队列

循环队列是一种基于数组的队列实现方式,它通过在数组中固定的位置上循环使用空间来实现队列的功能。循环队列有一个固定的容量,当队列满时,新元素可以覆盖掉队列头部的元素,从而实现循环利用空间。循环队列有两个指针,一个指向队列头部,一个指向队列尾部,通过这两个指针的移动,实现队列的入队和出队操作。循环队列解决了普通队列在出队操作时需要移动大量元素的问题,使得入队和出队的时间复杂度都为O(1)。

m0_74774362的博客 1221

c语言实现循环队列

如有问题,还请大家批评指正,共同努力,共同进步!直接上干的,可实现覆盖式存储。

gang_001 348

数据结构 - 循环队列

循环队列(Circular Queue),也被称为环形队列,是一种特殊的队列数据结构,其特点在于它的队列元素排列呈环形,队列的头部和尾部相连,形成一个闭环。这种数据结构具有一定的固定大小,一旦队列的尾部追上队列的头部,就会发生循环,即新元素会覆盖队列中最早添加的元素,从而实现了循环利用内存空间的效果。

weixin_52952392的博客 1591

【C++模块实现】| 【06】日志模块添加循环覆盖写文件功能

========》以下全部代码查看《========【C++模块实现】| 【01】日志系统实现 【C++模块实现】| 【02】日志系统优化 【C++模块实现】| 【03】文件管理模块 【C++模块实现】| 【04】配置模块 【C++模块实现】| 【05】日志模块增加配置模块的功能 2、遇到的问题 2.1 日志文件大小的限制没有达到预期的要求 2.2 yamlstring 3、测试 测试循环覆盖写文件 测试代码 参考文章=========》Log4j2 RollingFileAppender《==

weixin_45926547的博客 2009

环形缓冲区(Ring Buffer)使用说明

源码功能包含:实现环形缓冲区的初始函数;实现环形缓冲区是否为空、是否满功能;实现环形缓冲区读写功能。

爬坡的小蜗牛的博客 8181

多文件循环覆盖存储

【代码】多文件循环覆盖存储。

m0_58152548的博客 562

环形缓冲区原理与C语言实现ringbuffer

本文章介绍了环形缓冲区的原理,应用场景,并通过C语言代码实现了一个环形缓冲区ringbuffer的示例。

SEU123WW的博客 2382

C语言实现环形数据缓冲处理

本文主要介绍环形缓冲区的C语言实现方式,用于大数据传输。

Adam 1032

linux fifo环形队列 覆盖写_linux内核数据结构之kfifo

1、前言最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。为了保证进程A减少等待时间,可以在A和B之间采用一个缓冲区,A每次将数据存放在缓冲区中,B每次冲...

weixin_34327476的博客 788

LINUX C 实现循环队列,模拟覆盖循环算法模拟

#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define true 1 #define false 0 #define BUF_SIZE 4 //定义队列 typedef struct Queue { int BUF[BUF_SIZE]; int front; int rear; }QUEUE; //初始化队列 void initQueue(QUEUE *queue_q) ...

jiangjiankang的专栏 465
上一篇: 【固件升级】之IAP(二)
下一篇: RTthread之手动移植
Long-Run
博客等级 码龄3年 4600粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值