- 实现了一个多线程环境下的高并发内存分配器,多个线程可以并发无锁的申请内存,并且会进行内存碎片的合并
- 其效率比malloc高20%左右,解决了多核多线程环境下锁竞争问题,内存申请的效率问题,内存碎片问题
C++,VS2019,链表,哈希表,单例模式,多线程,互斥锁,TLS线程本地存储
设计了一个3层缓存结构来实现内存的申请,回收,内存碎片的合并等功能
第一层 ThreadCache: 每个线程独享一个线程池,用于小于256K内存的分配,从此处申请内存无锁,申请的内存大小为对齐后的大小
第二层 CentralCache: 中心缓存由所有线程共享,ThreadCache按需从CentralCache获取对齐后的内存块,CentralCache会周期性的回收分配给ThreadCache中的内存避免一个线程占用了太多内存,CentralCache需要按照内存对齐后的大小加桶锁,粒度更小,锁的竞争不会很激烈
第三层 PageCache: 页缓存存储的内存以页为单位存储和分配,CentralCache没有内存时,从PageCache分配出一定数量的page,并切割成定长大小的小块内存,分配给CentralCache,PageCache会回收CentralCache中闲置的Span对象,并合并相邻的页,从而组成更大的页达到缓解内存碎片的问题的目的