写点什么

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

评论

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

创新实践:基于边缘智能的边云协同智能驾驶训练舱解决方案

火山引擎边缘云

IoT 智能驾驶 大模型 AI 基础设施 边缘智能

数字化浪潮下的数据资产管理:解锁保险行业的无限潜能

数造万象

保险 数据治理 数据血缘 数据资产管理 #数据

百元投入即可拥有“数字人”!双十一华为云Flexus数字人更超值

平平无奇爱好科技

超简单、超高性价比!双十一华为云Flexus数字人轻松上手

平平无奇爱好科技

升级原生鸿蒙即可领近千元权益!华为Mate70和MateX6到手即可升级

最新动态

App 测试必学技能 adb 命令

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

测试

自动化测试中常用的 JavaScript 脚本

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

测试

工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景

声网

鸿蒙NEXT开发案例:温度转换

zhongcx

史上最强悍的Mate来啦!开场曲《怒放的生命》AiMax版独家上线华为视频

最新动态

超简单、超高性价比的数字人!双十一华为云数字人Flexus特惠亮相

平平无奇爱好科技

公司首次制定项目管理制度应该如何做

爱吃小舅的鱼

项目管理

Selenium 框架与常用操作详解

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

测试

Page Object 设计模式:实现 Selenium 测试用例的良好分层

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

测试

如何选择最适合企业的ETL解决方案?

RestCloud

kettle ETL 数据集成 DataX ETLCloud

WebRTC 作者加入 OpenAI 主导实时 AI 项目;TTS 小模型 OuteTTS v0.2 发布:声音克隆+多语言

声网

京东商品详情数据接口调用,商城上货实战案例(仅供参考)

tbapi

京东API接口 京东商品详情接口

员工管理系统分析:14种解决方案比较

爱吃小舅的鱼

人事管理系统 员工管理系统

华为云Flexus数字人超低门槛!双十一轻松实现数字人自由

平平无奇爱好科技

显式等待与隐式等待详解:Selenium 自动化测试中的关键概念

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

测试

即购即享,制作简单!双十一轻松入购华为云Flexus数字人

平平无奇爱好科技

传媒行业必备!双十一购买华为云Flexus数字人后,我总结了3大优势

平平无奇爱好科技

品牌营销新路径!双十一华为云Flexus数字人内容输出更高效

平平无奇爱好科技

想要进行Facebook直播?快来看看这份详细指南!

Ogcloud

海外直播专线 海外直播 海外直播网络 facebook直播 facebook运营

Altair 助力eVTOL,与航空航天初创企业Moya Aero合作

Altair RapidMiner

测试 仿真 智能制造 航天航空 altair

web 自动化测试框架 cypress全面指南

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

测试

国内首家! 阿里云人工智能平台 PAI 通过 ITU 国际标准测评

阿里云大数据AI技术

人工智能 阿里云 PAI ITU

快来获取“数字员工”!双十一华为云Flexus数字人不到千元

平平无奇爱好科技

比特币临近10万美元回调:后市走势与关键因素解读

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

QCN9074 vs. QCN9024: Which WiFi 6E Module is Right for You?

wallyslilly

QCN9074 QCN9024

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