google.tcmalloc
线程缓存(thread
cache)
加锁(locking)
加锁的开销是比较大的(cpu
要同步cache
),一般要几十个时钟周期,特别是cpu
较多的时候,锁冲突概率大大增加。
malloc
不是在进入malloc
就马上加锁,而是在
thread cache
耗尽后才加锁(用于从全局堆获取内存),加锁的频率被大大降低(通常情况下是几百倍)。
free
不是在每次free
时都加锁,而是在free
导致
local cache
空闲出整页内存时,才加锁将内存页交还给全局堆(global
heap)
。
radix-tree
tcmalloc
使用的中心数据结构是radix-tree
,这是trie-tree
的一个变种。tcmalloc
中的radix-tree
更是大幅简化,相当于多层页表,
32
位环境下是
2
层,
64
位环境下是
3
层
。这样,对一个指针的查找可以在O(1)
的时间内完成,并且可以查找范围(在合并内存页时是必须的)。
Hash
也是O(1)
,但是Hash
不能按范围查找,再加上其它一些缺陷(hash
冲突、rehash
,O(1)
的常数项也较大等)
,hash
不适合tcmalloc
。
按尺寸分组
对小于一定尺寸(32K)
的malloc
,每种尺寸在一些连续的内存页上分配。这被称为size-class
,每种尺寸并不是完全等距的,请求的尺寸会按一定规则对齐到下一个size-class
。
使用size-class
,malloc
出的内存就不需要在相邻的内存上(紧邻在malloc
出来的内存之前)做簿记(book
keeping)
了。传统的malloc
需要这样的簿记,以便free
时能找到链接的块,并且得到正确的内存大小。
使用
size-class
不但可以省掉额外的内存消耗,并且,可以按
size-class
对齐
。
在malloc
时,按请求的尺寸查找
相应的size-class
,如果大于max-size-class
(32k
),就直接从全局堆分配,并且总是页对齐的。
free
时,在radix-tree
中查找free
的内存地址,得到其所属的span
(span
就是一块连续多个页的内存),进而得到其它信息(如size-class
等,如果是大块内存则直接从全局堆free
)。对于小块内存,大多数情况下,剩下的事情就是一个简单的链表操作。如果这次free
导致整个span
空闲,就将span
回收。
总结
tcmalloc
的巨大优势:
其他相关文档
http://code.google.com/p/google-perftools/
General
Information and Documentation
tcmalloc.html
documentation in Chinese (against perftools 0.94)
分享到:
相关推荐
**Tcmalloc-v2.10:深入理解内存管理和内存泄漏** Tcmalloc,全称为“Thread-Caching Malloc”,是Google开发的一款高效、优化的内存分配器,它被包含在gperftools库中,版本2.10提供了一系列性能优化和内存管理...
tcmalloc是Google开发的一种高效内存分配器,它是jemalloc的变种,主要设计目标是提高多线程环境下的内存分配性能。tcmalloc通过优化内存分配过程,减少了锁的竞争,提升了大规模并发应用的性能。在这个压缩包中,...
tcmalloc排查内存泄漏的方法 tcmalloc是一种高性能的内存管理库,它可以帮助开发者检测和解决内存泄漏问题。在本文中,我们将介绍如何使用tcmalloc来排查内存泄漏的方法。 安装gperftools 首先,我们需要安装...
**VS2003-Tcmalloc静态链接库详解** 在软件开发中,内存管理是至关重要的部分,它关乎程序的性能、稳定性和资源利用效率。Tcmalloc是Google开发的一款高效的内存分配器,其全称为"Thread-Caching Malloc"(线程缓存...
在Linux 64位系统上编译安装Google的tcmalloc是一个涉及到系统级编程和内存管理的高级操作。tcmalloc是Google开发的一种高效的内存分配器,它优化了C++标准库中的malloc和free函数,提供了更快速的内存分配和释放,...
### 控制内存增长TCMALLOC #### 一、引言 在现代软件开发过程中,内存管理是确保程序高效运行的关键因素之一。不合理的内存管理可能导致应用程序性能下降甚至崩溃。为了解决这一问题,Google开发了一款名为...
安装tcmalloc所需的源代码,和完整编译安装应用过程。 unzip tcmalloc.zip tar -zxvf gperftools-2.1.tar.gz cd gperftools-2.1 ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-...
在讨论基于NUMA架构的TCMalloc内存管理算法之前,我们先来深入了解NUMA架构和TCMalloc算法的概念及其在内存管理中的作用。 NUMA(Non-Uniform Memory Access)架构是一种多处理器架构,其中每个处理器(CPU)有其...
These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.
These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.
**Tcmalloc详解** Tcmalloc,全称为Thread-Caching Malloc,是Google开发的一款高效内存分配器。它被设计用于提升多线程环境下的内存分配性能,通过将内存分配细化到线程局部存储(TLS,Thread-Local Storage)级别...
这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定. 不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装...
项目简介:该项目实现了一个简易的高并发内存池框架,将内存池设计为thread cache、central cache、page cache三层架构,从而实现高效的多线程内存管理。 核心技术:链表、哈希桶、操作系统内存管理、单例模式的设计...
TCM分配该存储库包含TCMalloc C ++代码。 TCMalloc是Google对C的malloc()和C ++的operator new的自定义实现,用于在C和C ++代码中进行内存分配。 TCMalloc是一种快速的多线程malloc实现。构建TCMalloc 是TCMalloc的...
本项目为基于TCMalloc原理设计的C++高并发内存池源码,包含21个文件,涵盖7个头文件、4个JSON配置文件、4个C++源文件、2个Markdown文件、1个Git忽略文件、1个LICENSE文件以及相关构建文件。该项目借鉴了Google开源的...
tcmallc内存库的安装方法,然后在编译时将其静态链接到库cmimpl 。 target_link_libraries(cmimpl -pthread ) #######静态链接c++库################### SET_TARGET_PROPERTIES(cmimpl PROPERTIES LINK_FLAGS "-...
如果显示类似下面的信息,即表示支持tcmalloc加速 (nginx八个线程都支持) nginx 31655 www 9w REG 8,1 0 479533 /tmp/tcmalloc/.31655 nginx 31656 www 11w REG 8,1 ...
本项目为基于C++语言的TCMalloc内存优化模块的设计源码,包含558个文件,主要包括199个C++源文件(.cc),142个头文件(.h),30个Python脚本(.py),27个Markdown文档(.md),以及相关图像文件(.png)、项目文件...
TCMalloc,全称为Thread-Caching Malloc,是Google开发的一款高效内存分配器,包含在开源工具包"google-perftools"中。与传统的glibc库中的malloc相比,TCMalloc在内存管理和分配方面表现出显著的优越性,特别是在...