QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2020-03-10
  • 本文字数:902 字

    阅读完需:约 3 分钟

谷歌开源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-03-10 08:053871

评论

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

每日一题:LeetCode-129. 求根节点到叶节点数字之和

Geek_4z9ami

面试 算法 LeetCode 二叉树 DFS

Redis 也支持全文搜索 了?这也太强了

越长大越悲伤

redis Jedis redisearch

华为云 CodeArts Artifact:开启企业管理新模式

YG科技

Topaz Video AI for mac v4.0.7注册激活版 人工智能视频增强 支持M/Intel

Rose

mac软件下载 人工智能视频增强 Video Enhance AI 下载 Video Enhance AI 注册

VisualDiffer for Mac(文件夹和文件比较工具) 1.8.9中文激活密钥版

mac

苹果mac Windows软件 VisualDiffer 文件快速比较工具

文件夹和文件比较工具 VisualDiffer免激活最新版

mac大玩家j

Mac软件 对比软件 文件夹对比工具

拓扑排序实现循环依赖判断 | 京东云技术团队

京东科技开发者

后端 排序算法 循环依赖 拓扑排序

Nacos 配置中心源码 | 京东物流技术团队

京东科技开发者

源码 nacos 源码剖析 配置中心

零基础也能搞定文案生成应用,半小时包教包会!「大模型摇摇乐」硬核教程来啦!

飞桨PaddlePaddle

人工智能 代码 零基础 开发教程 文案生成

基于FFmpeg实现一个数据流风格的视频处理工具 | 社区征文

为自己带盐

ffmpeg #技术人的2023总结

解锁数字化时代的软件包管理利器—华为云CodeArts Artifact.docx

YG科技

大数据离在线混部资源调度的演进和选型

丁点大数据

大数据 云原生 云原生大数据

华为云助力企业引领数字化时代

YG科技

软件测试/人工智能丨逻辑运算符

测试人

人工智能 软件测试

Q-learning 入门:以 Frozen Lake 游戏环境为例

Baihai IDP

人工智能 程序员 AI 强化学习 白海科技

华为云耀云服务器L实例,数字化竞争的制胜法宝

YG科技

CloudQuery x 达梦,国产数据库正当时

BinTools图尔兹

数据库 数据库管理 数据库安全 达梦 兼容适配

Sermant:无代理服务网格架构解析及无门槛玩转插件开发

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 DTSE Tech Talk

安卓设备解锁工具 FonesGo Android Unlocker激活中文版

胖墩儿不胖y

Mac软件 安卓设备解锁工具

使用Flink完成流数据统计 | 京东云技术团队

京东科技开发者

大数据 flink stream 数据统计

浅谈SQL优化小技巧 | 京东云技术团队

京东科技开发者

MySQL 数据库 sql 性能优化

华为云CodeArts Artifact:数字化时代软件包管理的领航者

YG科技

轻松建网站,一键部署,华为云不止省时还省心

YG科技

Wireshark中的http协议包分析

小齐写代码

Fusion Studio 18 v18.6.4完美兼容破解版 附Fusion Studio激活补丁

Rose

mac视频后期特效处理 Fusion Studio 18下载 Fusion Studio激活秘钥 Blackmagic Fusion Studio

谷歌开源TCMalloc,专为C和C++定制的内存分配器_编程语言_Sergio De Simone_InfoQ精选文章