写点什么

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

评论

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

龙蜥操作系统将捐赠开放原子开源基金会

OpenAnolis小助手

Linux centos 开源社区 开放原子开源基金会

linux几个没用但是有趣的命令

入门小站

Linux

模块9 毕设

SAKIN

使用 Spring Boot 构建可重用的模拟模块

码语者

Spring Boot Module

Go语言,深入了解 RWMutex 实现原理

微客鸟窝

Go 语言 11月日更

【死磕NIO】— 阻塞、非阻塞、同步、异步,傻傻分不清楚

chenssy

11月日更 死磕 Java 死磕 NIO

移动端自动化 AutoJS 快速入门指南

星安果

自动化 Autojs

设计模式【3.3】-- CGLIB动态代理源码解读

秦怀杂货店

Java 设计模式

Flink 实践教程-入门(4):读取 MySQL 数据写入到 ES

腾讯云大数据

流计算 Oceanus

巩固Java基础,备战来年跳槽——你的薪资自己说了算

Java 编程 程序员 面试 线程

浅谈DNS递归解析和迭代解析之间的区别

喀拉峻

网络安全

在线2-36进制转文本工具

入门小站

工具

GitHub标星139K的:“嵌入式Linux系统开发教程”

Java Linux 编程 程序员

Prometheus HTTP API 查询(二) 表达式查询

耳东@Erdong

Prometheus PromQL HTTP API 11月日更

算法入门-快速排序

ES_her0

11月日更

阿里云性能测试服务PTS新面貌 - 压测协议、施压能力全新升级

阿里巴巴中间件

阿里云 中间件 性能测试 SaaS 压测

08 K8S之资源对象介绍

穿过生命散发芬芳

k8s 11月日更

死锁是如何工作的

卢卡多多

死锁 11月日更

Flink 实践教程-入门(5):写入 ClickHouse

腾讯云大数据

流计算 Oceanus

GitHub多次霸榜,两个月拿下10000+Star,不愧是阿里内部开源的SpringCloud Alibaba笔记

Sakura

Java 编程 架构 面试 计算机

基于 RocketMQ 构建阿里云事件驱动引擎EventBridge

阿里巴巴中间件

阿里云 RocketMQ 云原生 中间件 事件总线

科技热点周刊|马斯克卖掉特斯拉 10% 股票;Facebook 停用面部识别系统;微软拥抱 Metaverse;雅虎退出中国

青云技术社区

云计算 facebook

7张图揭晓RocketMQ存储设计的精髓

阿里巴巴中间件

阿里云 技术 RocketMQ 中间件 存储

如何解决 fs.renameSync() 跨区移动文件的问题

liuzhen007

11月日更

《Kubernetes in action 读书笔记》:容器技术的发展

后台技术汇

Kubernetes 11月日更

[ CloudWeGo 微服务实践 - 07 ] 阶段总结

baiyutang

golang 微服务 11月日更

树莓派

IT蜗壳-Tango

11月日更

构筑“数据连接器”,腾讯云大数据推出“开源开放”战略

腾讯云大数据

大数据

远程代码执行漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

aardio 开发桌面应用,这几点必须要掌握!

星安果

Python aardio

Android C++系列:通过 JNI 访问 Java 字段和方法调用

轻口味

android 11月日更

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