自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 《MySQL数据库基础》9.索引原理

MySQL索引深度解析:从原理到实践 本文深入剖析MySQL索引的核心机制,重点讲解B+树索引结构及其在InnoDB引擎中的实现方式。文章首先通过书籍目录的类比说明索引的本质作用,详细介绍了主键索引、唯一索引等不同类型索引的特点。随后深入探讨索引底层原理,包括MySQL与磁盘交互的基本单位Page、聚簇索引与非聚簇索引的区别,以及B+树相比哈希表、二叉树的优势。特别分析了聚簇索引在范围查询和顺序访问方面的性能优势,以及二级索引可能引发的回表问题。最后指出索引是一把双刃剑,需要权衡查询加速与写入开销的关系,强

2026-05-27 20:52:29 633 13

原创 《MySQL数据库基础》8.复合查询

本文介绍了MySQL多表查询的核心技术,包括基础多表查询、子查询和连接查询。通过公司管理系统案例,演示了如何联合查询员工、部门和工资等级表。重点讲解了标量、多行、多列子查询的使用场景和执行逻辑,以及FROM子句中使用子查询创建派生表的方法。最后详细说明了JOIN连接的语法和应用,包括内连接和自连接的实现方式。这些技术能有效解决实际开发中跨表数据查询的需求。

2026-05-27 20:51:47 533 13

原创 《MySQL数据库基础》7.内置函数

本文介绍了MySQL中常用的四类函数:1. 时间函数(NOW、DATE_FORMAT、DATEDIFF等)用于日期时间处理;2. 字符串函数(CONCAT、SUBSTRING、LENGTH等)实现字符串操作;3. 数学函数(ROUND、ABS、POWER等)进行数值计算;4. 系统信息函数(VERSION、DATABASE等)获取数据库信息。每个函数都配有语法说明和示例,涵盖日期格式化、字符串截取、数值运算等常见场景,是MySQL数据库操作的实用参考手册。

2026-05-26 20:47:55 368 14

原创 《MySQL数据库基础》6.表的增删查改

摘要:本文介绍了MySQL数据库操作的基本语法,包括CRUD四大操作。创建操作(Create)包含单行/多行数据插入、冲突更新和替换;查询操作(Retrieve)涵盖全列/指定列查询、WHERE条件筛选(比较/逻辑/区间运算符等)、排序和分页;更新操作(Update)演示字段修改;删除操作(Delete)说明单列和全列删除。文中通过学生成绩表案例详细说明各语法使用场景,如分数区间筛选、总分排序等实用操作,并强调了全列查询的性能影响。

2026-05-07 21:03:49 387 3

原创 《Linux网络编程》10.五种I/O模型与多路转接

本文详细介绍了Linux系统中的五种I/O模型及其实现方式,重点分析了多路转接技术中的select、poll和epoll机制。主要内容包括: 五种I/O模型对比:从阻塞I/O到异步I/O的工作原理和特点 select机制:文件描述符集合操作、工作流程及其局限性 poll机制:与select的区别、接口使用及优缺点 epoll机制:核心接口、底层实现原理(红黑树+就绪链表)、水平触发与边缘触发模式 文章深入剖析了epoll如何通过事件驱动和回调机制解决select/poll的性能瓶颈,实现了O(1)时间复杂度

2026-05-07 15:55:42 537 1

原创 《Linux网络编程》9.数据链路层原理

MTU指二层网络(如以太网)所能承载的三层数据(如IP数据包)的最大尺寸,单位是字节。以太网的标准MTU是1500字节。这不是物理极限,而是一个被广泛接受的行业约定。你的数据包如果超过它,就需要做“拆分”处理。它不包括二层的帧头帧尾(源/目的MAC、类型、FCS校验等),只指帧里面能装的有效载荷。你可以把MTU想象成高速公路隧道的限高杆。卡车(IP数据包)想通过隧道,总高度必须≤限高。如果装得太高(超过MTU),就需要把货物卸下来分批运输,这就是IP分片。

2026-05-06 20:41:47 840 1

原创 《Linux网络编程》8.网络层IP原理

一种局域网(LAN)技术标准,定义了数据在。

2026-05-06 18:09:51 2865 1

原创 《Linux网络编程》7.TCP原理

📝 TCP协议深度解析:连接管理与可靠性机制 本文系统剖析了TCP协议的核心机制,重点围绕三大主题展开: 1️⃣ 报文结构与连接管理 TCP报头详解:16位端口号、32位序列/确认号、6位标志位(SYN/ACK/FIN等)及可变长选项 三次握手流程:SYN同步序列号 → SYN+ACK确认 → ACK完成建立,解决ISN同步与历史连接问题 四次挥手机制:FIN发起关闭 → ACK确认 → FIN反向关闭 → ACK确认,TIME_WAIT状态确保可靠终止 2️⃣ 可靠性保障体系 确认应答:累积确认+选择性

2026-05-05 20:11:33 672 5

原创 《Linux网络编程》6.UDP原理

UDP协议特性解析摘要 UDP是一种无连接、不可靠的传输层协议,其报头结构简洁,仅包含源/目的端口、长度和校验和字段。核心特点包括:无连接通信(每次传输独立)、不可靠交付(不保证顺序、不重传丢失数据包)、严格保持消息边界(面向数据报)以及支持广播/多播功能。UDP的优势在于低延迟和灵活性,适用于实时应用(如视频会议、在线游戏)和自定义协议场景,但需要应用层自行处理可靠性问题。其缓冲区机制也体现了无连接特性——只有接收缓冲区而无发送缓冲区,通过SO_SNDBUF参数控制内存占用。UDP将网络传输的复杂性交由开

2026-05-05 16:09:09 680 3

原创 《Linux网络编程》5.HTTPS协议

简单说,加密就是把一段能看懂的信息(明文),通过特定规则和一把钥匙(密钥),转换成看不懂的乱码(密文)的过程。只有拥有对应钥匙的人,才能把乱码恢复成原文。

2026-05-04 13:45:25 1012 9

原创 《Redis数据库》1.初识Redis

Redis作为高性能内存数据库,凭借微秒级读写速度和丰富数据结构,成为现代系统架构的关键组件。文章首先对比Redis与MySQL的核心差异,指出Redis适合缓存、排行榜等场景,而MySQL更适合核心业务数据存储。接着详细介绍了Redis的典型应用:缓存加速、实时排行榜(SortedSet)、分布式锁(SET NX PX)和消息队列(List/Streams)。最后提供了Linux系统下通过包管理器快速安装Redis的步骤,以及使用redis-cli验证连接的方法。全文强调Redis与MySQL的互补关系,

2026-05-04 11:29:47 449 9

原创 《Linux网络编程》4.应用层HTTP协议

HTTP协议基础与简单服务器实现 摘要: 本文首先介绍了HTTP协议的基本概念,包括URL结构、HTTP方法、状态码分类、报文头部和正文格式等核心内容。然后详细阐述了一个基于C++的简单HTTP服务器实现方案,包含TCP套接字封装、HTTP请求解析和响应生成等模块。服务器能够处理GET请求,返回静态HTML文件,并实现404错误页面功能。文章通过代码示例展示了从接收原始HTTP请求到生成响应的完整流程,包括请求行解析、头部处理、文件读取和响应组装等关键步骤。该实现采用多进程模型处理并发连接,适合学习HTTP

2026-05-04 11:29:09 1054 14

原创 《Linux网络编程》3.应用层自定义协议与序列化

本文介绍了基于TCP协议的网络计算器实现方案,重点讲解了应用层协议设计和序列化处理。主要内容包括:1. 网络协议分层模型解析,说明应用层协议的作用;2. 提出网络计算器的需求,分析数据完整性问题及解决方案;3. 详细设计序列化与反序列化机制,使用JSON格式封装数据;4. 实现Socket封装类、协议处理类和计算器业务逻辑;5. 通过自定义协议解决TCP粘包问题,采用长度前缀标识消息边界。该方案通过分层设计实现了可靠的数据传输和业务处理,为网络应用开发提供了完整的技术实现参考。

2026-04-16 20:12:55 462 23

原创 《CMake自动化构建工具》 1.第一个CMake工程

摘要: 本文介绍了CMake的基本概念与使用方法。CMake是一个跨平台的开源构建工具,通过CMakeLists.txt配置文件生成不同平台的原生构建脚本(如Makefile),简化大型项目的编译管理。文章详细讲解了CMake的安装方法(Ubuntu、VSCode插件),并通过一个简单的“Hello World”示例演示了CMake的基本流程:编写CMakeLists.txt(指定最低版本、项目名称、可执行文件)、运行cmake生成Makefile、执行make编译程序。此外,解释了cmake_minimu

2026-04-07 15:30:04 417 18

原创 《Linux网络编程》2.Socket编程(UDP/TCP)

本文介绍了基于C++的UDP和TCP网络编程实现。主要内容包括:1)UDP编程的核心接口(socket、bind、send/recv)及C++封装实现UDPServer类;2)TCP编程的关键接口(listen、accept、connect)及TCPServer类的封装,包含InetAddr地址处理类;3)分别给出了UDP和TCP的客户端与服务器实现示例代码。文章重点阐述了两种协议的网络编程实现差异,并通过面向对象方式对底层系统调用进行封装,提升了代码复用性和可维护性。最后指出当前TCPServer实现存在

2026-04-02 20:00:46 1453 14

原创 《Linux网络编程》1.网络基础

本文系统介绍了网络协议的基础知识,主要包含三部分内容:1. 协议基础:阐述了网络协议的定义、OSI七层模型和TCP/IP四层模型,通过寄快递的类比解释了各层功能;2. 网络传输:详细说明了MAC地址、局域网通信原理和数据报头的封装/解封装过程;3. Socket编程准备:讲解了IP地址、端口号、Socket概念以及TCP/UDP协议的核心机制和典型应用场景,并介绍了网络字节序的标准。文章通过生活化类比,使复杂的网络概念易于理解,为后续网络编程打下理论基础。

2026-04-02 15:42:01 726 9

原创 《算法竞赛从入门到国奖》算法基础:动态规划-最长子序列

本文介绍了四种经典动态规划问题的解法:1. 最长上升子序列(LIS):使用dp[i]表示以第i个元素结尾的最长子序列长度,通过比较前序元素进行状态转移。2. 合唱队形问题:通过正反两次LIS计算,找到中间峰值点,计算需要移除的最少学生数。3. 最长公共子序列(LCS):使用二维dp表,根据字符匹配情况分别处理相等和不等的情况。4. 编辑距离:计算字符串转换的最小操作次数,考虑插入、删除和替换三种操作。每种算法都给出了状态定义、转移方程和C++实现代码,适用于算法竞赛和面试准备。

2026-04-01 23:40:40 1725 9

原创 《Linux系统编程》20.常见程序设计模式

本文介绍了四种经典设计模式及其在Linux系统编程中的应用: 单例模式:分为饿汉模式(启动时创建)和懒汉模式(首次调用创建),重点解决线程安全和资源管理问题。 责任链模式与消息队列:通过SystemV消息队列实现进程通信,并设计责任链处理消息(格式化、保存、备份),实现高内聚低耦合。 建造者模式与信号量:封装SystemV信号量,使用建造者模式灵活配置信号量集合,实现父子进程同步打印。 生产者消费者模型:基于阻塞队列实现线程安全的数据缓冲,解决生产消费速度不匹配问题。 每种模式都配有C++实现代码,展示了设

2026-04-01 15:02:58 873 13

原创 《算法竞赛从入门到国奖》算法基础:动态规划-路径dp

本文介绍了四种动态规划算法的解题思路与实现代码:1. 矩阵最小路径和问题,使用dp[i][j]记录到达(i,j)的最小路径和;2. 迷雾森林问题,计算从起点到终点的不同路径方案数;3. 过河卒问题,处理带有障碍物的网格路径计数;4. 方格取数问题,采用双线程同步DP解决重复取值问题。每个算法都详细说明了状态表示、转移方程、初始化方法和填表顺序,并提供了完整的C++代码实现。这些经典DP问题展示了动态规划在路径规划类问题中的典型应用。

2026-03-31 22:52:59 864 7

原创 《Linux系统编程》19.线程同步与互斥

本文详细介绍了Linux线程编程中的互斥与同步机制。主要内容包括: 线程互斥:解释了临界资源、临界区的概念,分析了资源竞争问题,并介绍了互斥锁的使用方法、接口函数和封装实现,通过测试案例展示了加锁的必要性。 线程同步:讨论了条件变量的作用和接口,重点阐述了条件变量与互斥锁的正确使用顺序,提供了测试代码和封装实现,解决了线程饥饿问题。 线程安全:区分了线程安全与可重入性的概念,分析了导致非线程安全的原因,并给出了实现线程安全和可重入性的具体方法。 文章通过大量代码示例,系统地讲解了多线程编程中的关键问题及其解

2026-03-31 22:04:07 805 9

原创 《Linux系统编程》18.线程概念与控制

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流一个进程内的所有线程共享资源,包括虚拟地址空间,时间片等在Linux中的线程被叫做轻量级进程,本质还是用进程模拟的。但为了迎合大众,还是叫做线程。

2026-03-30 14:46:09 461 15

原创 《MySQL数据库基础》5. 表的约束

本文介绍了MySQL数据库中的常见字段约束类型及其应用场景。主要包括:1)空属性(NULL/NOT NULL)用于保证数据完整性;2)默认值(DEFAULT)设置常用初始值;3)列描述(COMMENT)添加字段注释;4)零填充(ZEROFILL)格式化数字显示;5)主键(PRIMARY KEY)确保唯一标识;6)自增长(AUTO_INCREMENT)实现自动编号;7)唯一键(UNIQUE KEY)保证业务数据唯一性;8)外键(FOREIGN KEY)维护表间关联关系。通过实例说明了各种约束的使用方法和注意事

2026-03-28 23:07:38 540 5

原创 《Linux系统编程》17.信号

本文介绍了Linux系统中信号的概念、产生、保存和处理机制。信号是一种异步通知机制,用于告知进程发生了特定事件。文章通过生活化的比喻(如快递通知、上课铃)解释了信号的异步性、软中断特性和标识方式。详细阐述了信号的多种产生方式(键盘输入、硬件异常、系统调用等)和内核中的保存结构(未决信号集、阻塞信号集、处理函数)。重点讲解了信号捕捉的两种方法(signal和sigaction)及其注意事项,包括信号处理函数的安全性要求。文章还补充了中断机制(硬件中断、时钟中断、软中断)与信号处理的关联,以及用户态/内核态切换

2026-03-28 15:12:45 809 9

原创 《算法竞赛从入门到国奖》算法基础:动态规划-基础线性dp

【算法动态规划专题】本文介绍了三个经典动态规划问题的解法:1. 台阶问题(P1192)- 状态转移方程:dp[i]=Σdp[i-j] (1≤j≤k),初始dp[0]=1,计算到第n阶的方法数。2. 最大子段和(P1115)- 状态转移:若前序和≥0则累加,否则重新开始,求最大连续子数组和。3. 传球游戏(P1057)- 用dp[i][j]表示传i次到j号的方式数,考虑左右相邻传球,最终求传m次回起点的方法数。每个问题均给出核心状态定义、转移方程和C++实现代码。

2026-03-26 22:19:31 382

原创 《Linux系统编程》16.进程间通信-共享内存

本文介绍了Linux中高效的进程间通信方式SystemV共享内存。共享内存允许多个进程直接访问同一块物理内存区域,避免了数据拷贝,但需要配合同步机制。文章详细讲解了共享内存的原理、SystemV API接口(shmget、shmat、shmdt等),并提供了一个C++封装类实现共享内存的创建、附加和分离功能。最后通过server/client测试用例展示了共享内存的实际应用,其中server端创建共享内存并读取数据,client端写入数据,双方通过"exit"指令终止通信。该实现体现了共

2026-03-26 21:05:42 492 3

原创 《Linux系统编程》15.进程间通信-管道

摘要:本文详细介绍了Linux进程间通信(IPC)的两种管道机制。匿名管道适用于父子进程通信,通过pipe()创建并继承文件描述符实现数据传输;命名管道(FIFO)则通过文件系统路径名实现任意进程间通信,使用mkfifo创建特殊文件。文章对比了两者的特性,包括阻塞/非阻塞模式、读写规则和生命周期,并提供了C/C++封装实现及测试用例。重点阐述了管道的工作原理、系统调用接口(pipe/mkfifo/open/read/write)及注意事项,如文件描述符管理、原子性保证和错误处理等。

2026-03-25 23:13:08 324

原创 《Linux系统编程》14.库的制作与原理

本文系统介绍了Linux环境下库文件的概念与使用,重点解析了静态库和动态库的生成与链接机制。主要内容包括:1)静态库和动态库的创建方法及使用场景;2)目标文件和ELF文件格式的详细解析;3)链接与加载过程的深入剖析,涵盖符号解析、节合并、地址分配和重定位等关键环节;4)程序地址空间的"三位一体"关系(文件地址、虚拟地址、物理地址);5)动态链接的全过程,包括库加载、符号解析和延迟绑定等机制。通过具体示例和理论分析,全面阐述了Linux程序从编译到执行的完整生命周期。

2026-03-25 21:13:40 1179 10

原创 《Linux系统编程》13.Ext系列文件系统

本文系统介绍了Linux文件系统的核心概念与底层机制。首先阐述了块设备的基本单位(扇区与块)、分区管理以及inode元数据结构;然后深入解析ext2文件系统的分块组设计,包括超级块、块描述符表、位图和inode表等组件;最后详细分析了文件创建、读取、删除和目录访问等操作的底层流程,重点讲解了路径解析、dentry缓存和inode管理的交互机制。文章通过类比仓库管理的方式,生动说明了文件名与inode的关系,并强调Linux通过多级缓存优化文件访问性能的核心思想,为理解文件系统工作原理提供了系统性的技术视角。

2026-03-25 17:20:05 612 6

原创 《Linux系统编程》12.基础IO

本文深入探讨了Linux系统中的文件概念与I/O机制。首先从狭义和广义两个维度理解文件:狭义指磁盘存储,广义体现"一切皆文件"的设计哲学。文章对比了C语言文件接口(fopen/fread)和系统调用(open/read),分析了文件描述符本质是内核资源索引。重点剖析了Linux文件系统的三个核心特性:1)通过文件描述符统一管理资源;2)默认分配标准输入/输出/错误描述符;3)支持重定向机制。最后详细讲解了用户态和内核态缓冲区的层级结构及其优化原理,包括缓冲类型、同步机制等。整体展现了Li

2026-03-25 11:12:43 395 5

原创 《算法竞赛从入门到国奖》算法基础:数据结构-并查集的拓展

本文介绍了两种扩展的并查集结构:扩展域并查集和带权并查集。扩展域并查集通过将元素拆分为多个域(如朋友域、敌人域)来处理复杂关系,适用于元素间存在多种相互关系的场景。带权并查集则在普通并查集基础上为节点增加权值,用于表示节点间的距离或其他信息。文章以团伙问题和食物链问题为例,详细讲解了两种并查集的实现原理和代码应用,展示了如何通过并查集扩展解决更复杂的关系约束问题。

2026-03-24 20:02:56 400 3

原创 《实战项目-个人在线OJ平台》1.项目简介和演示

本文介绍了基于C++开发的在线编程评判系统Yupureki,采用分布式架构设计,包含主服务器、编译服务器和MySQL数据库三大模块。系统使用C++-httlib作为HTTP服务器,支持题目管理、代码编辑和多测试用例判题功能,具有负载均衡和守护进程特性。前端采用响应式设计,集成ACE编辑器;后端实现MVC分层架构,通过责任链模式提升灵活性。项目演示了题库管理、代码编写和判题界面等核心功能,展现了从文件系统到MySQL数据库的版本演进过程。

2026-03-24 15:50:55 670 8

原创 《MySQL数据库基础》4. 数据类型

MySQL数据类型全解析:数值、字符串与时间类型详解 本文系统介绍了MySQL中的主要数据类型,分为三大类: 数值类型:包括整型(TINYINT到BIGINT)、浮点型(FLOAT/DOUBLE)和精确小数(DECIMAL),详细说明了各类型的存储范围、字节大小及适用场景 字符串类型:重点对比CHAR(定长)和VARCHAR(变长)的特性,并介绍了二进制和文本大对象类型 日期时间类型:涵盖DATE、TIME、DATETIME和TIMESTAMP等类型的特点与差异 特别强调了财务数据推荐使用DECIMAL、短

2026-03-17 20:22:57 686 9

原创 《MySQL数据库基础》3. 表的操作

本文介绍了MySQL数据库表的基本操作,包括表的创建、查看和修改表结构等内容。详细讲解了创建表的语法格式和字段属性设置,并通过users表示例进行说明。同时介绍了查看表结构的desc命令及其输出含义。重点阐述了修改表结构的多种方法:添加列(ADD)、修改列(MODIFY)、删除列(DROP)、重命名列(CHANGE)以及重命名表(RENAME TO)等操作。文章以结构体类比表结构,帮助读者理解表结构修改的概念,适合数据库初学者学习基础表操作。

2026-03-17 19:28:52 449 7

原创 《MySQL数据库基础》2. 库的操作

本文介绍了MySQL数据库的创建与管理操作。主要内容包括:1. 创建数据库的语法及示例,可指定字符集(如utf8)和校验规则(如utf8_general_ci);2. 字符集与校验规则的关系及选择注意事项,不同设置会影响存储空间和字符串比较方式;3. 数据库基本操作命令:查看数据库、显示创建语句、修改字符集(ALTER DATABASE)以及删除数据库(DROP DATABASE)等。重点强调了字符集和校验规则选择的重要性,错误的设置可能导致存储问题或查询结果差异。

2026-03-16 22:31:52 427 8

原创 《MySQL数据库基础》1. 数据库基础

文章摘要:本文系统介绍了数据库基础知识与应用,重点讲解MySQL数据库。首先阐述了数据库的概念及其相较于文件系统的优势,分析了主流关系型数据库产品(Oracle/MySQL/SQL Server等)的特点与适用场景。接着详细说明MySQL的基本操作,包括连接服务器、创建数据库/表、数据插入查询等命令。最后深入解析MySQL存储引擎,对比InnoDB、MyISAM等不同引擎的特性与适用环境,指出InnoDB作为默认引擎在事务处理方面的优势。全文以MySQL为核心,覆盖数据库从理论到实践的完整知识体系。

2026-03-16 22:08:16 554 5

原创 《C++实战项目-高并发内存池》8. 最终性能优化与测试

摘要:本文介绍了Yupureki的个人专栏项目——高并发内存池的优化方案。针对PageCache锁竞争严重的性能问题,采用Google TCMalloc中的基数树(Radix Tree)数据结构进行优化,通过读写分离机制避免了线程竞争。文章详细展示了基数树的三种模板实现(单层、双层、三层数组),并提供了性能测试代码对比优化前后的malloc/free效率。项目完整代码已开源在GitHub,适用于32位平台,能有效提升内存管理的高并发性能。

2026-03-15 23:22:28 647 9

原创 《C++实战项目-高并发内存池》7.大块内存的申请与释放

本文探讨了高并发内存池中处理大块内存申请与释放的优化策略。当申请内存超过256KB时,直接向PageCache申请而非ThreadCache;若超过128页(1MB),则直接向系统申请。释放时也遵循相同路径:大块内存直接返还PageCache,超限内存则直接归还系统。这种分级处理机制有效提升了内存管理效率,通过合理分配各级缓存职责,确保系统在高负载下仍能保持稳定性能。

2026-03-15 22:44:39 454 7

原创 《C++实战项目-高并发内存池》6.内存释放流程

本文介绍了高并发内存池的内存回收机制,分为ThreadCache、CentralCache和PageCache三个层级。ThreadCache将多余内存块归还给CentralCache,CentralCache通过PageCache的哈希表查找对应Span进行回收。当Span所有内存块都回收后,CentralCache将其归还给PageCache。PageCache会对回收的Span进行前后合并以缓解内存碎片,并更新哈希映射关系。整个过程通过多级缓存和合并策略实现了高效的内存回收管理。

2026-03-15 22:31:32 599 9

原创 《C++实战项目-高并发内存池》5.PageCache构造

摘要:本文介绍了PageCache框架的内存管理机制。当CentralCache申请内存时,PageCache会优先查找合适大小的Span,若未找到则从更大Span中分割或向系统申请128页大内存块。PageCache采用单例模式设计,包含SpanList哈希桶和互斥锁等成员变量,提供NewSpan方法用于内存分配,支持内存分割与合并以减少碎片。释放内存时通过合并相邻空闲Span来优化内存利用率,整个框架实现了高效的内存管理功能。

2026-03-14 11:33:06 504 3

原创 《C++实战项目-高并发内存池》4.CentralCache构造

本文介绍了高并发内存池中CentralCache的实现细节。CentralCache作为线程缓存和页缓存之间的中间层,采用哈希桶结构管理不同大小的内存块。文章详细解析了CentralCache的核心组件:Span结构体用于管理特定大小的内存块自由链表,SpanList则实现了带锁的Span链表操作。CentralCache通过单例模式实现,包含获取Span、分配内存块给线程缓存等关键功能。其中,FetchRangeObj负责批量分配对象给线程缓存,GetOneSpan则处理Span的获取和初始化过程。这些设

2026-03-14 11:32:43 688 4

C语言利用控制台实现贪吃蛇

利用c语言实现贪吃蛇,功能包括蛇的移动,食物生成,快慢移动与食物分值,吃食物判定,死亡判定,历史成绩记录

2025-10-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除