
项目
文章平均质量分 95
茉莉玫瑰花茶
天生我材必有用
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从零实现一个高并发内存池 - 4
本文详细介绍了高并发内存池中的PageCache层,重点阐述了其内存申请和释放的过程。PageCache作为内存池的最后一层,负责管理大块内存的分配与回收。当CentralCache向PageCache申请内存时,PageCache会检查对应的Span是否存在,若不存在则向后寻找更大的Span进行分裂。如果仍找不到合适的Span,PageCache会向操作系统申请大块内存并切分。PageCache的核心结构是基于SpanList的哈希桶,与CentralCache不同,它采用直接定址法映射,能够高效处理大块原创 2025-05-16 15:34:14 · 937 阅读 · 0 评论 -
从零实现一个高并发内存池 - 6
本文介绍了高并发内存池项目的优化与性能测试过程。项目通过三层缓存机制(线程缓存、中央缓存、页面缓存)管理内存分配,针对不同大小的内存请求采用不同的策略:小于等于256KB的内存请求通过三层缓存快速分配,大于256KB的内存请求则根据大小进一步细分处理。优化过程中,使用定长内存池替代malloc和new,减少内存碎片,提升分配效率。此外,通过基数树(Radix Tree)优化了内存映射的查找效率,实现了无锁读取,显著提升了多线程环境下的性能。最终的性能测试表明,优化后的内存池在多线程环境下表现优于传统的mal原创 2025-05-18 01:21:16 · 927 阅读 · 0 评论 -
从零实现一个高并发内存池 - 5
本文详细介绍了内存回收机制,重点在于线程缓存、中央缓存和页面缓存之间的内存回收流程。当线程缓存的链表过长时,会将多余的内存块批量返回到中央缓存,中央缓存再根据内存块大小将其放入全局链表供其他线程使用。为了高效管理内存块与Span的映射关系,采用`unordered_map`记录页号与Span的映射。当Span的`useCount`为0时,表示所有小块内存对象已回收,可以将其归还到页面缓存。页面缓存会尝试合并相邻的Span以缓解内存碎片问题,并通过`_isUse`标志位避免线程安全问题。原创 2025-05-17 01:06:02 · 768 阅读 · 0 评论 -
从零实现一个高并发内存池 - 3
本文详细介绍了高并发内存池中的中央缓存(CentralCache)结构及其工作原理。中央缓存采用哈希桶结构,与线程本地缓存(ThreadCache)的映射关系一致,但中央缓存是共享的,需要加锁。每个哈希桶挂载一个SpanList链表,Span管理大块内存,并将其切割成小内存块对象,挂载在自由链表中。中央缓存使用桶锁,减少锁竞争。内存申请流程中,当ThreadCache内存不足时,会向CentralCache批量申请内存,采用慢开始算法控制申请数量。若CentralCache内存不足,则向PageCache申原创 2025-05-15 17:57:33 · 1052 阅读 · 0 评论 -
从零实现一个高并发内存池 - 2
《高并发内存池-threadcache》一文详细介绍了ThreadCache的基本结构与原理。ThreadCache基于哈希桶结构,每个桶维护一个自由链表,用于存储特定大小的内存块。系统为每个线程配备独立的ThreadCache对象,通过无锁操作提升内存分配与释放的效率。内存申请流程包括分段对齐、桶位置映射及从CentralCache获取内存块。内存释放流程则将内存块推回对应桶的自由链表,若链表过长则触发回收机制。文章还介绍了线程本地存储(TLS)在多线程环境中的应用,确保了线程间数据隔离与无锁操作。通过分原创 2025-05-14 20:21:29 · 783 阅读 · 0 评论 -
从零实现一个高并发内存池 - 1
本文深入探讨了C++中内存管理的重要性,并介绍了如何通过内存池技术提升程序性能。传统的内存分配方式如malloc和free在高并发场景下存在性能瓶颈,而内存池通过预先申请大块内存并在程序内部管理分配,显著提高了内存分配效率和减少了内存碎片。文章详细解析了Google的tcmalloc内存分配器,它通过线程缓存、中央缓存和页缓存三层结构优化了多线程环境下的内存分配。此外,文章还展示了如何实现一个定长内存池,并通过实验比较了传统new/delete与内存池在性能上的差异,证明了内存池在高频内存操作中的优势。原创 2025-05-13 19:36:14 · 1096 阅读 · 0 评论 -
自主Shell命令行解释器
我们一直使用的"ls","cd","pwd","mkdir"等命令,都是在命令行上输入的,我们之前对于命令行的理解:命令行是干啥的?是为我们做命令行解释的。命令行这个东西实际上是我们登入时,系统默认创建的,我们最终输入的命令都交给他了。原创 2025-02-03 20:29:12 · 1034 阅读 · 0 评论 -
扫雷游戏——C语言
但在此,我们思考一个问题:排雷中,如果没搞到雷,那么,此处的周为有几个雷,此处是要显示的,所以我们要再搞一个int型函数----GETCOUNT,用于计算周围雷的个数。为了代码的条理性,我们将代码分为三个文件进行运行,其中,两个源文件,一个用于创建基本路线,一个用于存放相关函数代码,还有一个头文件用与存放库函数,声明自定义函数。一个程序,当然有他的运行思维,在我们搞了两个二维数组后,就真正的开始对扫雷游戏进行解剖分析了,接下来,我们需要对数组进行。文件----sao_lei.c。是的,又没问题,下一个!原创 2024-01-30 23:48:21 · 733 阅读 · 1 评论