写点什么

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

评论

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

洞见科技助力华夏银行「隐私计算数据安全平台」建设,赋能金融业务提质增效

洞见科技

金融科技 隐私计算

im即时通讯的简介和趋势

BeeWorks

2022年秋季广州美博会-2022年9月份广州美博会

Geek_0b38bb

2022年广州美博会 秋季广州美博会 9月份广州美博会 美博会

MySQL面试宝典-文件篇

CRMEB

MySQL采用B+树作为索引的原因

龙空白白

索引结构 MySQL 数据库 索引原理

【直播回顾】OpenHarmony知识赋能六期第一课—OpenHarmony智能家居项目介绍

OpenHarmony开发者

OpenHarmony

我们公司使用了6年的项目部署方案,打包 + 一键部署详解,稳的一批

沉默王二

Java

征文投稿丨基于轻量应用服务器+OSS的中小型应用运维实践

阿里云弹性计算

运维 OSS CI/CD 轻量应用

SAP Marketing Cloud 功能概述(一)

汪子熙

云原生 SaaS SAP 6月月更 Marketing Cloud

华为云发布ModelBox AI应用开发框架

华为云开发者联盟

人工智能 华为云

如何串连三个「语言工具」描述简洁清晰的需求?

LigaAI

程序人生 产品经理 需求 产品需求 产品设计与思考

疫情过后,远程办公还在吗,企业如何构建数字化转型

BeeWorks

Volcano社区v1.6.0版本正式发布

华为云开发者联盟

云计算 云原生 后端

搭建个人博客,Docsify+Github webhook+JGit解决方案

艾小仙

Java GitHub webhook jgit halo

【Python技能树共建】常用标准库

梦想橡皮擦

Python 6月月更

大数据培训Flink 流怎么来处理 API

@零度

flink 大数据开发

SAP Field Service Management 和微信集成的案例分享和实现介绍

汪子熙

云原生 SaaS SAP 6月月更 Marketing Cloud

5种在TypeScript中使用的类型保护

华为云开发者联盟

前端 变量 类型

转转统一权限系统的设计与实现(后端实现篇)

转转技术团队

后端 权限控制

【战码先锋】润和赛道正式开启,马上加入赢取双重大礼!

OpenHarmony开发者

Open Harmony

记录那些年 Nacos 的坑

Damon

6月月更

云渲染技术的“公”“私”

Finovy Cloud

服务器 云渲染 元宇宙 渲染器

大数据培训Flink 中的 Window理解与分析

@零度

flink 大数据开发

2022年广州美博会-2022第60届广州国际美博会

Geek_0b38bb

2022年广州美博会 秋季广州美博会 美博会 第60届广州美博会

C#/VB.NET:从PDF中提取图片

在下毛毛雨

C# .net PDF 提取图像

如何规避开源安全漏洞风险?新思科技OSSRA报告给出建议

BeeWorks

2022年深圳美博会-2022年深圳国际美博会

Geek_0b38bb

美博会 2022年深圳美博会 2022年深圳国际美博会 深圳美博会

NodeJS 5分钟 连接 Redis 读写操作 👑

德育处主任

redis Node 6月月更

龙蜥社区成立云原生 SIG,引入 3 大核心技术,共建云原生生态

OpenAnolis小助手

开源 技术 云原生 龙蜥社区 sig

软件开发外包的优势,哪些企业适合软件开发外包?

开源直播系统源码

软件开发 直播带货 直播带货源码 视频带货

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