【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

评论

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

Cnetos7系统安装git仓库教程

百度搜索:蓝易云

git Linux centos7 运维 云服务器

博客重启计划,阿坚产品笔记

Bonaparte

产品 产品经理 产品设计 产品需求 产品定义

Nautilus Chain 更换全新测试网,主网即将在不久上线

股市老人

学科知识图谱学习平台项目 :技术栈Java、Neo4j、MySQL等超详细教学

汀丶人工智能

人工智能 自然语言处理 深度学习 neo4j 知识图谱

给大模型穹顶,树一根存力支柱

脑极体

存储

快速离线安装MySql数据库

zhengzai7

MySQL

代码随想录Day16 - 二叉树(三)

jjn0703

大模型基础:理论与技术演进

永佳

Nautilus Chain 更换全新测试网,主网即将在不久上线

威廉META

突破:GGX(Golden Gate)发布悉尼测试网,跨链基础设施迈出重要一步

股市老人

Nautilus Chain 更换全新测试网,主网即将在不久上线

EOSdreamer111

Docker学习路线5:在 Docker 中实现数据持久化

小万哥

Java c++ Go Docker 后端

H5页面秒开优化与实践

汽车之家客户端前端团队

vue项目nginx服务器部署

百度搜索:蓝易云

vue.js Linux 运维 Web 云服务器

告别内卷,瓴羊飞渡,中国ToB生态迎来 iPhone 时刻

B Impact

从十万行代码定位undefined is not an object (evaluating 't.length')

汽车之家客户端前端团队

小巧玲珑的AVIF,你的网页图片换新装!

汽车之家客户端前端团队

CentOS7系统搭建SFTP教程。

百度搜索:蓝易云

Linux 运维 SSH 云服务器 sftp

2023年Java面试最全攻略:秋招求职跳槽必刷题目1000+,横扫一切技术盲点!

架构师之道

java面试

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?

福大大架构师每日一题

福大大架构师每日一题

以 AI 变革组织运营与管理,2023 Kyligence 用户大会盛大举行

Kyligence

数据分析 数智化

Linux系统iptables与Firewalld防火墙区别?

百度搜索:蓝易云

云计算 Linux 运维 Firewalld iptables

PyTorch: 池化-线性-激活函数层

timerring

PyTorch

给我五分钟!让你掌握React的Redux中间件原理

汽车之家客户端前端团队

不容错过!10个Python自动化办公库免费送!(上)

程序员晚枫

Python 自动化办公

Centos7系列安装FineBI教程。

百度搜索:蓝易云

云计算 Linux centos 运维 FineBI

Linux系统安装redis教程。

百度搜索:蓝易云

redis 云计算 Linux 运维 云服务器

Docker学习路线6:使用第三方镜像

小万哥

Docker 容器 运维 后端 开发

Amazon 上的数字孪生:使用 L3 预测性数字孪生来预测“行为”

亚马逊云科技 (Amazon Web Services)

Amazon

Nautilus Chain 更换全新测试网,主网即将在不久上线

鳄鱼视界

深入了解C++优先队列

二哈侠

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