大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

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

评论

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

秒送LBS场景下的C端SOA服务容灾建设之-数据备份篇

京东科技开发者

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

测试人

软件测试

大咖公开课 | AI自动化应用开发,让创意与效率并驾齐驱!

霍格沃兹测试开发学社

初识 TON:账号、Token、交易与资产安全

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

抖音自动化运营神器,7款RPA机器人上线

八爪鱼采集器︱RPA机器人

RPA 自动化 抖音 RPAxAI

LeetCode题解:1250. 检查「好数组」,裴蜀定理,详细注释

Lee Chen

企业如何通过数据虚拟化,构建逻辑数据编织平台?

Aloudata

数据虚拟化 Data Fabric 逻辑数据编织

财务规划中创新科技带来的变革力量

智达方通

全面预算管理 财务管理 财务规划

【实战分享】如何获取天猫商品评论数据接口及解析方法

tbapi

天猫商品评论数据接口 天猫评论API 天猫商品评论数据采集 天猫商品评论API

基于飞桨框架的稀疏计算使用指南

百度Geek说

百度飞桨

完蛋!我被 Out of Memory 包围了!

京东科技开发者

Java表达式引擎选型调研分析

京东科技开发者

2024英特尔中国学术峰会:聚焦绿色计算,推动产学融合

E科讯

LeetCode题解:1797. 设计一个验证系统,哈希表,JavaScript,详细注释

Lee Chen

LeetCode题解:1234. 替换子串得到平衡字符串,滑动窗口,详细注释

Lee Chen

关键字搜索新视角:API返回值中的商品热度分析

技术冰糖葫芦

API Explorer平台 API Explorer API 接口 API 测试 pinduoduo API

探索Web3:十大全新项目如何颠覆行业未来

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

MVP案例分享:绿野仙踪 - Zappos

ShineScrum

汽车配件行业MES系统:驱动高效生产与智能管理的新引擎

万界星空科技

mes 汽车行业 云mes 万界星空科技 汽车零配件行业

AI自动化应用开发,让创意与效率并驾齐驱!

测吧(北京)科技有限公司

测试

支付域——收单业务

庄小焱

支付系统 金融 收单 跨境收单

完蛋!我被 Out of Memory 包围了!

京东科技开发者

Visio文件编辑查看工具:Visio Viewer for Mac 激活版

你的猪会飞吗

mac软件下载

“AI+Security”系列第2期(二):人工智能风险治理机遇与挑战

云起无垠

金蝶云·苍穹追光者开发大赛,点燃高校AI应用创新之火

金蝶云·苍穹

再一次对MAZDA着迷 EZ先享官见证马自达百年不变的传承

极客天地

ETL数据集成丨PostgreSQL数据迁移至Hive数据库

RestCloud

数据库 postgresql hive ETL 数据集成

厦门等保测评机构有几家?在哪里?

行云管家

等保 等级保护 厦门

GOGC招聘集市开始啦

非凸科技

招聘 GOGT 全球开源技术峰会 全球开源极客嘉年华

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