写点什么

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

评论

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

KubeWharf:解析云原生未来的分布式操作系统

数字扫地僧

KubeWharf

京东商品详情接口在电商行业中的重要性及实时数据获取实现

Noah

DevSecOps研讨会年终专场来啦!邀您共探如何打好DevOps基础,赋能创新

龙智—DevSecOps解决方案

2023年度项目深入探索:AI与大模型在实际应用中的全景

数字扫地僧

浪潮信息存储助力企业智能化变革

财见

C++空类的那点事儿

树上有只程序猿

C++ 空类

it统一运维平台怎么样?有可以推荐的品牌吗?

行云管家

IT运维 安全运维 统一运维

数据的力量:Web3 游戏运营指南

Footprint Analytics

区块链游戏 游戏运营 Web3 游戏

KubeWharf:基于Kubernetes的分布式操作系统,助力云原生化部署和管理

bug菌

Kubernetes 社区征文

智能LED屏幕未来升级方向

Dylan

个性化 定制化 LED显示屏 全彩LED显示屏 led显示屏厂家

亚马逊云科技宣布推出四项Zero-ETL集成特性

财见

苹果万能视频播放器 Elmedia Video Player Pro中文最新版

胖墩儿不胖y

Mac软件 视频播放器 视频播放

淘宝API接口申请指南

联讯数据

开源大模型与微调策略概览

百度开发者中心

大模型 #人工智能 LLM

NFTScan | 11.27~12.03 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan

盘点那些国际知名的黑客(下篇)

禅道项目管理

互联网 黑客 计算机网络

09 | 队列:队列在线程池等有限资源池中的应用

鲁米

10 | 递归:如何用三行代码找到“最终推荐人”.md

鲁米

淘宝商品详情接口在电商运营中的应用实例

Noah

数据“库”的增删改查

小齐写代码

大模型训练:预训练模型与数据标准化

百度开发者中心

深度学习 #人工智能 LLM

金融大模型的微调实战

百度开发者中心

金融 大模型 #人工智能

一种全新的日志异常检测评估框架:LightAD

华为云开发者联盟

人工智能 机器学习 深度学习 华为云 华为云开发者联盟

inBuilder低代码平台新特性推荐-第十三期

inBuilder低代码平台

开源 低代码

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