
TCMalloc_设计高并发内存池
文章平均质量分 97
TCMalloc(Thread-Caching Malloc)是Google开发的gperftools中的一个高效多线程内存管理库,用于替代系统的内存分配相关函数(如malloc和free)。
Shimir
学习ヾ(◍°∇°◍)ノ゙
展开
-
1_入门设计一个高并发内存池_从基础开始了解TCMalloc概念_学习设计一个定长内存池
让我们用生活中的例子来解释TCMalloc(Thread-Caching Malloc)的现象:我们可以考虑一个类似于“饮水机、水壶与水杯”的场景,比如我们想要喝水的话,如果没有一些媒介,我们需要直接在水站取水,但是在我们上学时每个宿舍楼都有一个公共饮水机(只考虑一个,不要钻牛角尖),如果每一次想喝水都是直接来喝水,下一次渴了再来喝水,这样饮水机前的队伍大概很拥挤,同时不管对于个人还是群体,喝水的效率都很低。:在内存分配过程中,已经分配给某个进程或对象的内存块中,未被该进程或对象实际使用的部分内存空间。原创 2025-01-20 21:59:56 · 642 阅读 · 0 评论 -
2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计
来解决这个问题。测试结果:调试过程中可以看到两个线程互不影响地运行着。从测试结果看,两个线程是同时进行的,并且互不影响。原创 2025-01-21 18:39:43 · 1379 阅读 · 0 评论 -
3_高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计
单例模式(Singleton Pattern)是一种常用的软件设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。这个模式在多种场景中都非常有用,特别是在需要控制资源访问,或者管理全局状态信息时。单例模式又分为懒汉模式和饿汉模式,其中懒汉模式较为复杂。在C++中,实现单例模式通常涉及以下几个关键点私有构造函数:将类的构造函数声明为私有,以防止外部代码通过new关键字创建类的实例。私有静态实例变量:在类内部定义一个静态变量来保存类的唯一实例。这个变量是私有的,以防止外部直接访问。原创 2025-01-21 18:42:01 · 1371 阅读 · 0 评论 -
4_高并发内存池项目_高并发池内存释放设计_ThreadCache/CentralCache/PageCache回收并释放内存
对各缓存层释放内存的设计,不仅仅是从上一层回收内存,还包括对回收回来的内存怎样处理更有利于下一缓存层的回收,提高效率。线程对象释放内存ThreadCache(1.回收线程释放的内存,2.将多余内存整理归还CentralCache)CentralCache(1.回收ThreadCache释放的内存,2.将多余Span归还给PageCache)PageCache(1.回收CentralCache释放的Span,2.合并,3.并且将内存归还操作系统)1.从。原创 2025-01-23 21:02:46 · 1058 阅读 · 0 评论 -
5_高并发内存池项目内存优化、页号与Span映射关系使用基数树优化及测试性能与malloc、free比较
按位与操作会将两个操作数对应的二进制位进行与运算(只有当对应的两位都为1时,结果位才为1),这样可以根据页号的某些位信息在第二层页表中定位到特定的页数。由于ThreadCache是线程私有的,因此将它的内存池tcPool设置为静态的,保持全局只有一个tcPool,让所有线程创建自己的ThreadCache的同时,都从着一个定长内存池中申请内存。用数组表示单层基数树,下标对应着页号,数组中的内容是Span的地址BITS对应的是该平台下存储页号占的最大位数,LEHGIH表示的是页数,大小位2^BITS。原创 2025-01-23 21:47:39 · 750 阅读 · 0 评论