高效数据结构 - 循环队列

news/2025/10/22 14:09:17/文章来源:https://www.cnblogs.com/hont/p/19157833

循环队列在游戏开发中通常叫做CircularBuffer、RingBuffer,常用来做数据缓存,生产者/消费者模型等。

在UE中有内置这样的数据结构,而Unity的.Net库中恰恰没有。

 

为什么说这样的结构高效,以双下标循环队列为例。配个图:

q2

Tail是尾索引,Head是头部索引。当新元素加入循环队列时,Head索引+1并%取模操作

当加入队列的元素释放时(假如用于对象池),交换元素到尾部索引位置,Tail索引+1并%取模操作

 

我们知道Unity里做对象池通常是栈实现,Unity自己的对象池是List实现。

但是这样的方式都有问题,会导致早期加入池的对象长期不会被操作,CPU侧会导致缓存丢失。

而循环队列在高频率使用时,每个元素都会频繁使用,CPU缓存利用率非常高。

 

即使不是双下标,单下标的循环队列也有缓存利用率高效的特点。双下标则可

模拟生产者/消费者模型,用于多线程Job时检查任务是否完成。

 

UE的CircularBuffer用&与运算代替%取模操作,效率还会更高一些。

 

上代码。

public class CircularBuffer<T> where T : class, new()
{public T[] items;private int _head;private int _tail;public CircularBuffer(int capacity){items = new T[capacity];_head = 0;_tail = 0;for (int i = 0; i < capacity; ++i){items[i] = new T();}}public int Get(){var item = items[_head];_head = (_head + 1) % items.Length;return _head;}public void Release(int index){if (!ReferenceEquals(items[_tail], items[index])){Swap(_tail, index);}_tail = (_tail + 1) % items.Length;}private void Swap(int indexA, int indexB){var temp = items[indexA];items[indexA] = items[indexB];items[indexB] = temp;}
}

 

测试:

  • Stack 顺序测试: 845ms
  • CircularBuffer 顺序测试: 798ms
  • Stack 随机释放测试: 2490ms
  • CircularBuffer 随机释放测试: 2325ms

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据类型,二元运算符,自动类型提升规则,关系运算,取余模运算

数据类型,二元运算符,自动类型提升规则,关系运算,取余模运算数据类型,二元运算符,自动类型提升规则,关系运算,取余模运算 package com.kun.operator;public class Demo1 {public static void main(String[] ar…

股票技术面分析平台QuantMatrix深度解析 - 实践

股票技术面分析平台QuantMatrix深度解析 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

【C++实战(64)】C++ 邂逅SQLite3:数据库编程实战之旅 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

迷宫问题

#include <iostream> #include <stack> #include <vector> #include <climits> using namespace std;// 迷宫大小 const int ROW = 5; const int COL = 5;// 迷宫(0:可走,1:墙,起点(0,0)…

WPF使用MediaCapture开发相机应用(四、相机录视频)

在WPF中使用MediaCapture录视频还是挺简单的,教程是WinUI3的,WPF也可以直接用。 主要代码就几句,相对简单: var videos = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos); StorageFile file = awai…

Gitee本土化战略深度解析:中国开发者生态的合规与效率革命

Gitee本土化战略深度解析:中国开发者生态的合规与效率革命 在数字化转型加速的背景下,代码托管平台已成为企业研发基础设施的核心组件。作为国内领先的代码托管服务商,Gitee通过深度本土化战略构建了独特的竞争优势…

2025年10月上海装修公司口碑榜:十强对比评测

站在2025年10月的节点,准备装修的你大概率正被三件事困扰:预算怕超、工期怕拖、质量怕翻车。上海存量房超过780万套,二次翻新需求占年度装修总量62%,老房结构复杂、物业审批流程长、材料涨价频繁,让“选一家靠谱装…

2025年10月中国婚姻家事与财富管理律师评价榜:五强评测

当婚姻、继承、股权、跨境资产交织在一起,普通人最先感受到的是信息碎片化:谁懂信托架构?谁能追踪隐匿账户?怎样在离婚谈判里既保住公司控制权又不伤孩子?2025年,高净值家庭数量已突破220万户,年均增长8%,而家…

LGP8969 幻梦 Dream with Dynamic

LGP8969 幻梦 Dream with Dynamic \(\texttt{Luogu Link}\) 前言 唉,强校。 抛开别的不谈,这题意外地好懂……吗? 本学习笔记解析部分抄袭此文,代码抄袭此文。 题意简述 有一个长度为 \(n\) 的序列 \(A\),有初值。…

2025年10月中国婚姻家事与财富管理律师推荐榜:五强对比评测

站在2025年深秋,高净值家庭与新兴中产同时面临一个共性焦虑:婚姻结构变化带来的财产不确定性。北京、上海、深圳三地法院2024年婚姻家事案件标的额均值已升至320万元,隐匿财产线索发现率却不足三成。与此同时,金税…

2025年10月工业洗地机厂家推荐榜:十强对比评测与选型指南

一、引言 工业洗地机已成为制造、物流、物业、交通枢纽等场景提升清洁效率、降低人工成本的刚需装备。对于计划2025年第四季度完成设备更新或首次采购的决策者而言,如何在同质化宣传中快速锁定技术可靠、服务及时、全…

【多校支持、EI检索】第六届大数据与社会科学国际学术会议(ICBDSS 2025)

第六届大数据与社会科学国际学术会议 2025 6th International Conference on Big Data and Social Sciences(ICBDSS 2025) 经组委决定,本届会议延期至10月31日线上ZOOM形式召开 在这里看会议官网详情 大会时间:202…

2025年包装机厂家权威推荐榜单:全自动包装机/包装生产线/非标定制机器与生产线专业选购指南

2025年包装机厂家权威推荐榜单:全自动包装机/包装生产线/非标定制机器与生产线专业选购指南 一、行业背景与发展趋势 包装机械行业作为制造业的重要支撑领域,近年来呈现出智能化、柔性化、高效化的发展趋势。随着工业…

Timing Signoff 技术精要

1、为何 Timing Signoff 是 IC 设计的“守门人”? Timing Signoff 确保芯片设计在预定时钟频率下满足时序要求,并在多种工况下保持稳定性与可靠性。这是避免后期返工、提升产品良率与质量的重要步骤。图:Static Tim…

Bugku-Web题目-sqli-0x1- HackINI 2021 - 指南

Bugku-Web题目-sqli-0x1- HackINI 2021 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

02-GPIO-铁头山羊STM32标准库新版笔记

一、GPIO四种输出模式GPIO有8种工作模式输出:通过写0或者写1,控制引脚输出低电压或者高电压 输入:通过读取引脚是0还是1,判断引脚输入的是低电压还是高电压 通用:CPU 复用:其它片上外设 推挽:开漏:二、IO的最大…

IDC iPaaS市场报告解读:独立厂商与云巨头的“双轨竞速”

导语 在IDC最近发布的《中国企业集成平台(iPaaS)市场份额,2024:拥抱 Agentic AI 时代》报告中,华为作为云巨头连续两年排名第一,市场份额不断扩大。得帆信息作为专业iPaaS厂商,连续两年综合排名第三,引起行业广…

2025年10月仓储管理系统推荐:鸿链云仓领衔五大方案对比评测榜

一、引言 在供应链节奏日益加快的当下,仓储管理系统已成为制造、零售、医药、电商、冷链及第三方物流企业控制库存成本、保障履约时效、提升资金效率的核心数字底座。对于正面临“双11”大促备货、年度预算锁定及跨境…

读书笔记:白话解读Oracle范围分区

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

2025年10月人形机器人场景落地商评测榜:赛飞特工程技术集团数据透视

2025年10月人形机器人场景落地商排行榜:赛飞特工程技术集团全景评测 2025年10月人形机器人场景落地商对比榜:赛飞特工程技术集团深度解析 2025年10月人形机器人场景落地商评价榜:赛飞特工程技术集团权威排行 2025年…