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

Redis快的原因

1、基于内存实现

在这里插入图片描述
Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘,这样也就不受I/O限制。

2、I/O多路复用

多路指的是多个socket连接;复用指的是复用一个线程。多路复用主要有三种技术:select、 poll、epoll。epoll是最新的也是目前最好的多路复用技术。Redis使用IO多路复用的原理图如下所示:
在这里插入图片描述
Redis内核会一直监听socket上的连接请求,一旦有请求到达就交给Redis线程处理,这就实现了一个Redis线程处理多个IO流的效果。

Redis线程不会阻塞在某一个特定的客户端请求处理上,所以Redis可以同时和多个客户端连接并处理请求。select/epoll提供了基于事件的回调机制,即针对不同事件的发生,调用相应的事件处理器,因此Redis一直在处理事件,提升了Redis 的响应性能。

3、高效的数据结构

Redis中有多种数据类型,每种数据类型的底层都由一种或多种数据结构来支持。正是因为有了这些数据结构,所以大大的提升了Redis存储与读取速度。下图整理了Redis中常见数据类型与底层的数据结构:
在这里插入图片描述

3.1 简单动态字符串

Redis的字符串类型底层使用的是简单动态字符串(SDS),它是用来处理字符串的,C语言中用到SDS来处理字符串,C语言中的字符串展示如下图所示:
在这里插入图片描述
想要获取字符串“REDIS”的长度,需要从头开始遍历,直到遇到 ‘\0’ 为止。Redis是C语言实现的,那么Redis中字符串是怎么使用SDS的呢?如下图所示:
在这里插入图片描述
Redis中用一个len字段记录当前字符串的长度,想要获取长度只需要获取len字段即可。

Redis中SDS修改及空间扩充时,除了分配所必须的空间外,还会额外分配未使用的空间。具体的操作是如果len长度小于1M,那么将会额外分配与len相同长度的未使用空间,如果修改后长度大于1M,那么将分配1M 的使用空间。

Redis中存在惰性的空间释放,即是SDS缩短时并不会回收多余的内存空间,而是使用free字段将多出来的空间记录下来。如果后续有变更操作,直接使用 free中记录的空间,减少了内存的分配。

3.2 双端链表

Redis的List数据结构更多是被当作队列或栈来使用的,队列和栈的特性一个先进先出,一个先进后出,那么使用双端链表很好实现这些特性,双端链表的如下图所示:
在这里插入图片描述
头节点里同时还有一个参数len,用来记录链表长度的,因此获取链表长度时不用再遍历整个链表,直接拿到len值就可以了,这个时间复杂度是 O(1)。

3.3 压缩链表

如果在双端链表中,一个链表节点中存储一个小数据(如一个字节)。那么对应的就要保存头节点,前后指针等额外的数据,这样就浪费了空间,同时由于反复申请与释放操作也容易导致内存碎片化,内存的使用效率就太低了,于是就出现了压缩链表,如下图所示:
在这里插入图片描述
压缩列表的内存是连续分配的,遍历的速度很快。

3.4 跳跃表

Redis中跳跃表是在链表的基础上增加了多级索引来提升查找效率。如下图所示的跳跃表原理图:
在这里插入图片描述
跳跃表每一层都有一条有序的链表,最底层的链表包含了所有的元素。这样跳跃表就可以支持在 O(logN) 的时间复杂度里查找到对应的节点。

在Redis中跳表真实的存储结构是在头节点里记录了相应的信息,减少了一些不必要的系统开销,如下图所示:
在这里插入图片描述

3.5 hashTable

哈希表本质上是一个数组,每一个元素叫做哈希桶,每个桶中的entry保存着键值指针(key和value)。Redis其实就是一个全局哈希表,哈希表的时间复杂度是O(1),通过key的哈希值和哈希函数,就可以定位对应哈希桶的位置,从而确定桶中entry,然后找到对应数据,如下如所示
在这里插入图片描述
Redis中存储的数据越来越多的时候,会出现哈希冲突,所以Redis采用链式哈希的方式解决冲突,即同一个桶里面的元素使用链表保存,如下图所示:

在这里插入图片描述
随着数据量的增加,哈希冲突越来越多,链表也随之越来越长,进而导致查找性能变差。因此Redis使用了两个全局哈希表,通过rehash操作,增加现有的哈希桶数量,分散单桶元素数量,从而在减少哈希冲突的同时缩短链表长度,提高Redis的查询效率。

4、单线程模型

Redis的单线程指的是Redis的网络IO及键值对指令读写是由一个线程来执行的,对于Redis的持久化、集群数据同步、异步删除等都是其他线程执行。

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。Redis使用单线程的优势如下所示:

(1)不会因为线程创建导致的性能消耗

(2)避免上下文切换引起的CPU消耗,没有多线程切换的开销

(3)避免了线程之间的竞争问题,比如添加锁、释放锁、死锁等,不需要考虑各种锁问题。

5、合理的数据编码

对于每一种数据类型来说,底层的支持可能是多种数据结构,什么时候使用哪种数据结构,这就涉及到了编码转化的问题。Redis中不同的数据类型是如何进行编码转化,如下所示:

(1)String:存储数字时候采用 int类型的编码,如果是非数字的话,采用raw编码。

(2)List:字符串长度及元素个数小于一定范围使用ziplist编码,任意条件不满足,则转化为linkedlist编码。

(3)Hash:hash对象保存的键值对内的键和值字符串长度小于一定值及键值对。

(4)Set:保存元素为整数及元素个数小于一定范围使用intset编码,任意条件不满足,则使用hashtable编码。

(5)Zset:zset对象中保存的元素个数小于及成员长度小于一定值使用 ziplist编码,任意条件不满足,则使用skiplist编码。

相关文章:

Redis快的原因

1、基于内存实现 Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘,这样也就不受I/O限制。 2、I/O多路复用 多路指的是多个socket连接;复用指的是复用一个线…...

蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)

蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S12345…...

每日算法-250410

今天分享两道 LeetCode 题目&#xff0c;它们都可以巧妙地利用二分查找来解决。 275. H 指数 II 问题描述 思路&#xff1a;二分查找 H 指数的定义是&#xff1a;一个科学家有 h 篇论文分别被引用了至少 h 次。 题目给定的 citations 数组是升序排列的。这为我们使用二分查找…...

swagger + Document

swagger 虽然有了api接口&#xff0c;对于复杂接口返回值说明&#xff0c;文档还是不能少。如果是一个人做的还简单一点&#xff0c;现在都搞前后端分离&#xff0c;谁知道你要取那个值呢...

线程同步与互斥(下)

线程同步与互斥&#xff08;中&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147003513?fromshareblogdetail&sharetypeblogdetail&sharerId147003513&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link我们学习了互斥…...

MySQL 优化教程:让你的数据库飞起来

文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…...

SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记

目录 前言 背景与需求 代码改进方案 运行过程&#xff1a; 1、Run​编辑 2、过程&#xff1a; 3、过程时间线&#xff1a; 4、最终效果展示&#xff1a; 总结与展望 前言 机器学习缺点之一&#xff1a;即不可解释性。最近&#xff0c;我在使用stable diffusion v1.5 Co…...

位掩码、哈希表、异或运算、杨辉三角、素数查找、前缀和

1、位掩码 对二进制数操作的方法&#xff0c;&#xff08;mask1<<n&#xff09;,将数mask的第n位置为1&#xff0c;其它位置为0&#xff0c;即1000...2^n&#xff0c;当n较小时&#xff0c;可以用于解决类似于0/1背包的问题&#xff0c;要么是0&#xff0c;要么是1&…...

安装OpenJDK1.8 17 (macos M芯片)

安装OpenJDK 1.8 下载完后&#xff0c;解压&#xff0c;打开 环境变量的配置文件即可 vim ~/.zshrc #export JAVA_HOME/Users/xxxxx/jdk-21.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-17.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-11.jdk/Contents…...

Spring Boot 自动加载流程详解

前言 Spring Boot 是一个基于约定优于配置理念的框架&#xff0c;它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程&#xff0c;并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…...

2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制

流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时&#xff0c;最终的产物才是合格的。这些参数很容易受到外部随机因素的干扰&#xff0c;所 以需要实时调控。但由于参数众多&#xff0c;测量困难&#xff0c;很多参数想要及时调整并不容 易&#x…...

Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值

文章目录 一、RL反卷积算法&#xff08;1&#xff09;主要特点&#xff08;2&#xff09;基本原理&#xff08;3&#xff09;关键步骤&#xff08;4&#xff09;优化算法 二、项目实战&#xff08;1&#xff09;RL 反卷积&#xff08;2&#xff09;优化&#xff1a;RL 反卷积 …...

2025.04.10-拼多多春招笔试第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...

------------------V2024-2信息收集完结------------------

第二部分信息收集完结撒花*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* 。 进入开发部分&#xff0c;工具要求&#xff1a;phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...

Java Lambda与方法引用:函数式编程的颠覆性实践

在Java 8引入Lambda表达式和方法引用后&#xff0c;函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析&#xff0c;揭示如何在新项目中优雅运用这些特性&#xff0c;同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...

2025年常见渗透测试面试题- PHP考察(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 PHP考察 php的LFI&#xff0c;本地包含漏洞原理是什么&#xff1f;写一段带有漏洞的代码。手工的话如何发掘&am…...

【在校课堂笔记】南山 - 第 10 节课 总结

- 第 92 篇 - Date: 2025 - 04 - 10 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 南山 - 第 10 节课 文章目录 南山 - 第 10 节课一 in –> 存在性测试 - 基础介绍二 in –> 例题 - 火车票 - 使用 in 优化**问题**【代码 - 以前的代码】【代码 - 使用存在性测试 in】 …...

GaussDB ECPG与Oracle Pro_C深度对比:嵌入式SQL开发者的迁移指南

GaussDB ECPG与Oracle Pro*C深度对比&#xff1a;嵌入式SQL开发者的迁移指南 一、体系架构差异 关键组件对比表 二、语法兼容性分析 核心语法差异对比 c /* Pro*C示例 */ EXEC SQL SELECT empno INTO :emp_id FROM employees WHERE ename :name;/* ECPG等效实现 */ EXEC…...

debian系统中文输入法失效解决

在 Debian 9.6 上无法切换中文输入法的问题通常与输入法框架&#xff08;如 Fcitx 或 IBus&#xff09;的配置或依赖缺失有关。以下是详细的解决步骤&#xff1a; 1. 安装中文语言包 确保系统已安装中文语言支持&#xff1a; sudo apt update sudo apt install locales sudo…...

2025年危化品安全管理人员备考指南|智能题库+核心考点解析

作为危化品生产单位安全管理人员&#xff08;主要负责人&#xff09;&#xff0c;考试内容主要涵盖三大模块&#xff1a; 法律法规体系 《安全生产法》修订要点&#xff08;2023版&#xff09; 危险化学品重大危险源辨识标准&#xff08;GB 18218&#xff09; 最新《化工过…...

我为女儿开发了一个游戏网站

大家好&#xff0c;我是星河。 自从协助妻子为女儿开发了算数射击游戏后&#xff0c;星河就一直有个想法&#xff1a;为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣&#xff0c;但缺乏难度分级&#xff0c;无法根据女儿的学习进度灵活调整。而且&#xff0c;仅仅…...

SpringBoot企业级开发之【用户模块-更新用户基本信息】

接口文档&#xff1a; 开发前我们先看一下接口文档&#xff1a; 这是实现的预想结果&#xff1a; 实现思路&#xff1a; 设计一下我们的实现思路 拿起家伙实操&#xff1a; 1.controller 定义一个方法去修改用户&#xff1a; 注意&#xff01;是【put请求】 //更改用户信…...

循环神经网络 - 长短期记忆网络的门控机制

长短期记忆网络&#xff08;LSTM&#xff09;的门控机制是其核心设计&#xff0c;用来解决普通 RNN 在长程依赖中遇到的梯度消失与信息混淆问题。为了更进一步理解长短期记忆网络&#xff0c;本文我们来深入分析一下其门控机制。 一、理解长短期记忆网络的“三个门” 所谓门控…...

AutoKeras 处理图像回归预测

AutoKeras 是一个自动机器学习库&#xff0c;在处理图像回归预测问题时&#xff0c;它可以自动选择最佳的模型架构和超参数&#xff0c;从而简化深度学习模型的构建过程。 AutoKeras 主要用于分类和回归任务&#xff0c;它同样可以进行图像数据的回归预测。 步骤 1: 安装 Auto…...

批量清空图片的相机参数、地理位置等敏感元数据

我们在使用相机或者手机拍摄照片的时候&#xff0c;照片中都会带有一些敏感元数据信息&#xff0c;比如说相机的型号&#xff0c;参数&#xff0c;拍摄的时间地点等等。这些信息虽说不是那么引人注意&#xff0c;但是在某些时候他是非常隐私非常重要的。如果我们将这些信息泄露…...

驱动-字符设备驱动框架

简要了解 字符设备驱动框架 整个流程 文章目录 基本知识&#xff1a;实际应用效果说明 参考资料字符设备驱动框架基本结构关键数据结构 - 文件操作结构体(file_operations)struct module *ownerssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*wr…...

RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子

本文的目标 本文将在RKNN Docker环境中练习PPOCR示例&#xff0c;并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统&#xff1a;Windows11目标设备&#xff1a;搭载RK3588芯片的安卓开发板核心工具&#xff1a;包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...

88.高效写入文件—StringBuilder C#例子 WPF例子

在处理文件写入操作时&#xff0c;选择合适的方法可以显著影响程序的性能。本文将通过两个示例代码&#xff0c;对比使用 StringBuilder 和直接写入文件的性能差异&#xff0c;并提供具体的实现步骤。 问题背景 在实际开发中&#xff0c;我们经常需要将大量数据写入文件。然而…...

redis 延迟双删

Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略&#xff0c;通常在高并发场景下使用。以下是其核心内容&#xff1a; 1. 问题背景 当更新数据库时&#xff0c;如果未及时删除或更新缓存&#xff0c;可能导致后续读请求仍从缓存中读取旧数据&#xff0c;造成数…...

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#xfeff;青龙面板的功能多多&#xff0c;可以帮助我们自动化处理很多需要手动操作的事情&#xff0c;比如京东领京豆&#xff0c;阿里云盘签到白嫖 vip、掘金签到等等&#xff0c;本教程使用 Docker 搭建青龙面板&#xff0c;并结合 cpolar 内网穿透实现使用公网地址远程访…...

VectorBT量化入门系列:第五章 VectorBT性能评估与分析

VectorBT量化入门系列&#xff1a;第五章 VectorBT性能评估与分析 本教程专为中高级开发者设计&#xff0c;系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标&#xff0c;深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...

新能源商用车能耗终极优化指南:悬架、制动、电驱桥全链路硬核拆解(附仿真代码)

引言&#xff1a;新能源商用车的“续航战争”与工程师的破局点 1.1 行业现状&#xff1a;政策红利与技术瓶颈的博弈 数据冲击&#xff1a; 2023年中国新能源商用车销量突破50万辆&#xff0c;但平均续航仅为燃油车的55%&#xff08;数据来源&#xff1a;中汽协&#xff09;。…...

Maven笔记

Maven作用 依赖管理、版本控制标准化项目结构、自动化构建项目生命周期管理细分项目模块自动化构建、通过插件拓展构建过程 Maven下载及配置 https://blog.csdn.net/qq_29689343/article/details/135566775 使用IDEA 构建Maven工程 https://blog.csdn.net/qq_29689343/art…...

Java——接口扩展

JDK8开始接口中新增的方法 JDK7以前:接口中只能定义抽象方法。 JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态) JDK9的新特性:接口中可以定义私有方法。 默认方法 需要使用关键字default修饰 作用: 解决接口升级的问题 接口中默认方法的定义格式: 格式: public d…...

COD任务论文--MAMIFNet

摘要 提示&#xff1a;论文机翻 由于难以从复杂背景中区分高度相似的目标&#xff0c;伪装物体检测&#xff08;COD&#xff09;仍然是计算机视觉领域的一项具有挑战性的任务。现有的伪装物体检测方法往往在场景理解和信息利用方面存在困难&#xff0c;导致精度不足&#xff0c…...

基于MCP协议调用的大模型agent开发04

目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐&#xff1a; Anthropic MCP发布通告&#xff1a;https://www.anthropic.com/news/model-context-protocol MC…...

ComfyUI_Echomimic部署问题集合

本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI&#xff0c;我之前装的是ComfyU桌面版&#xff0c;现在用的是B站秋葉大佬的整合包。但内核都一样&#xff0c;错误也是通用的。遇到问题时&#xff0c;应该先去…...

音频转文本:如何识别音频成文字

Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...

脑科学与人工智能的交叉:未来智能科技的前沿与机遇

引言 随着科技的迅猛发展&#xff0c;脑科学与人工智能&#xff08;AI&#xff09;这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术&#xff0c;正带来一场跨学科的革命。这种结合不仅推动了科技进步&#xff0c;也在医疗、教育、娱乐等…...

Linux | I.MX6ULL外设功能验证(11)

01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...

AI助手:Claude

一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手&#xff0c;类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI&#xff08;Constitutional AI&#xff09;”为核心设计理念&#xff0c;强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...

vue项目proxy代理的方式

以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明&#xff0c;用于解决开发环境跨域问题&#xff1a; 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...

多项目并行时如何避免资源冲突

多项目并行时避免资源冲突需做到&#xff1a;精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中&#xff0c;精确的资源规划与调度尤其重要&#xff0c;它决定了项目资源能否高效利用&#xff0c;防止资源…...

求x的c(n,m)次方

近期看到一类很有趣的题啊&#xff0c;其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面&#xff1a;给定 x,n,m&#xff0c;求&#xff1a; mod 1000003471的值。 首先我们注意到&#xff0c;题目给定的模数1000003471为质数&#xff0c;根据费马…...

VS Code 的 .S 汇编文件里面的注释不显示绿色

1. 确认文件语言模式 打开 .S 文件后&#xff0c;查看 VS Code 右下角的状态栏&#xff0c;确认当前文件的识别模式&#xff08;如 Assembly、Plain Text 等&#xff09;。如果显示为 Plain Text 或其他非汇编模式&#xff1a; 点击状态栏中的语言模式&#xff08;如 Plain Te…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中&#xff0c;为了更好地处理传递给接口的参数值&#xff0c;解决在调试过程中的数据处理问题&#xff0c;我们经常需要用到函数处理数据。 过去&#xff0c;我们通过预执行脚本来处理数据&#xff0c;先添加脚本&#xff0c;然后将处理后的结果再赋值给请求参数。…...

ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机

作者的话 ADI的双核DSP&#xff0c;最早的一颗是Blackfin系列的BF561&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板&#xff1a;ADI原厂评估板 AD-ICE20000仿真器&#xff1a;ADI现阶段性能最好…...

JS包装类型Object

包装类型 1 对象 Object 声明普通对象 学习静态方法&#xff0c;只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...

【C++初阶】--- vector容器功能模拟实现

1.什么是vector&#xff1f; 在 C 里&#xff0c;std::vector 是标准模板库&#xff08;STL&#xff09;提供的一个非常实用的容器类&#xff0c;它可以看作是动态数组 2.成员变量 iterator _start;&#xff1a;指向 vector 中第一个元素的指针。 iterator _finish;&#x…...

FreeRTOS项目工程完善指南:STM32F103C8T6系列

FreeRTOS项目工程完善指南&#xff1a;STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程&#xff0c;添加串口功能并优化配置文件。 更多优质资源&#xff0c;请访问我的GitHub仓库&#xff1a;https://github.com/Despacito0o/FreeRTO…...