谷歌开源TCMalloc,专为C和C++定制的内存分配器

2020 年 3 月 10 日

谷歌开源TCMalloc,专为C和C++定制的内存分配器

谷歌表示,其 TCMalloc 可以代替 C 和 C++ 默认内存分配器,提供更高的扩展效率和更好的并行性支持

为了避免误解,值得注意的是,这实际上是谷歌第二次开源其内存分配器。事实上,谷歌在 2005 年就已经提供了其内存分配器,当时是作为谷歌性能工具的一部分连同其他工具一起推出的,其中包括内存分析器、旨在确保堆一致性的堆检查器以及基于 Perl 的 ppro 配置分析器和可视化工具。尽管有这么回事,但是,谷歌使用的内部版本随着时间的推移与外部版本出现了差异,因此,现在谷歌开源了 TCMalloc 的当前版本,其包括一些改进,如每个 CPU 缓存、一定规模大小的删除、快 / 慢路径改进,等等。

该仓库是谷歌目前 TCMalloc 的实现,我们在生产中的所有 C++ 程序都在使用它。该代码仅限于内存分配器实现本身。

如前所述,TCMalloc 包括 C*alloc 族和针对 C++ ::operator new 以及::operator delete 的实现。与C 和C++ 标准库提供的相应功能相比,它们提供了大量优化。例如,TCMalloc 利用固定大小的“页”从操作系统执行分配任务,从而简化了簿记过程。此外,其中一些页面专门用于特定大小的对象,如所有16 字节的对象。在需要获取或释放内存的时候,这还带来了简化。最后,它还会缓存常用对象以提高操作速度。

TCMalloc 还通过 MallocExtension 支持遥测扩展,这对于收集堆探查结果和快照以调查内存行为很有用。

有一些配置选项可用来调试TCMalloc 性能。特别是,我们可以定义逻辑页面大小,它们可以是4KiB、8KiB、32KiB 或256KiB。更大的页面将减少从操作系统请求新页面分配的可能性,从而以更大的内存消耗为代价实现更快的操作。它还可以基于每个线程或每个CPU 来设置缓存大小,这是默认设置。最后,我们可以调整内存释放的积极程度,这也会在几个方面影响性能。

TCMalloc 架构如下图所示,在相关文档中有详细的描述:

TCMalloc 只能使用谷歌内部构建系统Bazel 来构建,对于一些使用其他构建系统的开发人员来说,这可能有点让人感觉意外。但是对macOS、Ubuntu、Fedora 和Windows 来说都有二进制格式的Bazel 可用,因此,这应该不会成为主要障碍。

原文链接:

TCMalloc, Google’s Customized Memory Allocator for C and C++, Now Open Source

2020 年 3 月 10 日 08:05 2278

评论

发布
暂无评论
发现更多内容

共享服务中心建设原则-《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 研发管理 DDD

演化过程中的技术与业务双驱引擎

boshi

云计算 架构 中台 成长 数字化

区块链更多典型落地应用即将涌现

CECBC区块链专委会

区块链 落地应用

《我想进大厂》之MQ夺命连环11问

科技缪缪

kafka MQ 面试题 程序语言 面试求职

腾讯T6熬夜硬肝Lua程序员实战宝典,深入阐述虚拟机、编译器

周老师

Java 编程 程序员 架构 面试

技术人为什么该坚持写作?

极客思享

「国庆」忆读书生涯

我是程序员小贱

美食 旅行

架构训练营-week4-学习总结

于成龙

架构 作业 互联网架构 架构训练营

架构训练营-week4-作业

于成龙

作业 架构训练营

LeetCode题解:429. N叉树的层序遍历,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

技术与思想:区块链的双重属性

CECBC区块链专委会

区块链 大数据

在互联网站上怎么准确分辨别出MG平台真假VX(LGF7998)黑网的验证方法?

InfoQ_6b6a6317a692

week03总结

xxx

时空停滞

Sean

调试 心得

spring-boot-route(八)整合mybatis操作数据库

Java旅途

Java Spring Boot mybatis

week03作业

xxx

第一周-食堂就餐卡系统设计-UML设计

kawayi

洞察:区块链的危机与契机

CECBC区块链专委会

比特币 区块链 数字货币

阿里互联网神话,超级工程双十一如何打造终于开源了(共4篇)

小Q

学习 架构 面试 算法 阿里

第8周总结

Vincent

极客时间 极客大学

白玉试毒 | 灰度架构设计方案

高翔龙

架构设计 互联网架构设计 灰度 灰度发布 发布流程

惊艳!腾讯微软内部5大算法文档+源码,大厂offer拿到手软

小Q

学习 架构 数据结构 面试 算法

算法岗有没有泡沫

极客思享

菜鸟工程师的超神之路 -- 从校园到职场

极客思享

那个百无一用的技术主管

极客思享

区块链即将涌现更多典型落地应用

CECBC区块链专委会

区块链 落地应用

中小企业如何启动产品科普直播?

boshi

内容 营销 直播 企业应用

手把手教你锤面试官 02——设计模式轻松答

慵懒的土拨鼠

Java 设计模式 面试求职

可穿戴的“舌头鼠标”,催生“黏腻”人机交互的新想象?

脑极体

第8周作业

Vincent

极客时间 极客大学

「架构师训练营第 1 期」第三周作业

张国荣

谷歌开源TCMalloc,专为C和C++定制的内存分配器-InfoQ