NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

谷歌开源 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:053499

评论

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

稳定的数据云平台如何炼成?奇点云解读“RAS”典型问题

奇点云

奇点云 数据云平台 DataSimba

铜锁/Tongsuo项目管理委员会成立,重磅发布8.4.0版本

开放原子开源基金会

开源

All in One, 快速搭建端到端可观测体系

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 华为云可观测监控大屏

星河创新,产业引领:大模型引领的企业智能化升级创新实践

飞桨PaddlePaddle

人工智能 深度学习 开发者 WAVE SUMMIT

AI时代数据存储管理新挑战分论坛圆满举办

开放原子开源基金会

开源

开源工业物联网大数据分论坛圆满举办

开放原子开源基金会

开源

使用极狐GitLab Triage 来自动管理 Issue 和 MR

极狐GitLab

终端闲思录(3)- 标准三剑客的本质

黑客不够黑

终端 文件描述符

多功能数据恢复软件:Apeaksoft Data Recovery激活中文

mac大玩家j

数据恢复软件 Mac软件 Mac数据管理

前端 JS 安全对抗原理与实践

vivo互联网技术

前端加密 JS混淆 调试和反调试

荣誉 | 第七在线(7thonline)荣获STIF2023年度数智化创新典范奖

第七在线

从DevOps状态报告看技术团队的文化建设

京东科技开发者

七分技术、三分管理,做好供应链管理的需求预测

用友BIP

供应链

开源治理与开发者运营分论坛圆满举办

开放原子开源基金会

开源

软件开发

Geek_8da502

万能扫描仪整合软件:ExactScan pro免激活中文版

胖墩儿不胖y

Mac软件 扫描工具

开源赋能汽车智能化演进分论坛圆满举办

开放原子开源基金会

开源

【低代码】低代码平台协同&敏捷场景下的并行开发解决方案探索 | 京东云技术团队

京东科技开发者

敏捷 低代码 并行开发

openEuler Code Camp圆满举办

开放原子开源基金会

开源

聊点个人成长那点破事儿

6点无痛早起学习的和尚

写作 21 天技术人写作行动营

推动企业数智化国产替代 用友BIP献上中国方案

用友BIP

国产替代

为啥不建议用BeanUtils.copyProperties拷贝数据 | 京东云技术团队

京东科技开发者

spring BeanUtils copyProperties

一起学Elasticsearch系列-并发控制

Java随想录

Java 大数据 elastic 检索

优测云服务平台|总结Android开发常见风险及解决方案

优测云服务平台

风险 Android开发 Android解决方案

QCN6274 and QCN9274: functional differences and application areas of wireless chips

wallysSK

一文掌握 Kubernetes 证书

SEAL安全

Kubernetes 云原生 Kubernetes 集群 企业号12月PK榜

企业门户平台:八项必备功能助力业务升级

天津汇柏科技有限公司

网站 企业

3D 纹理贴图基础知识

3D建模设计

3D渲染 材质纹理贴图 3D材质编辑

领跑 AI 时代,开放原子开发者大会——2023龙蜥操作系统大会圆满举办

开放原子开源基金会

开源

2023开放原子开发者大会:赋予开发者高光时刻 推进开源生态健康发展

开放原子开源基金会

开源

微服务广播模式实践:维护内存数据的缓存一致性

华为云开发者联盟

微服务 云原生 后端 华为云 华为云开发者联盟

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