写点什么

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

评论

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

智慧车行预约小程序设计方案

CC同学

消息队列存储

supermenG

架构师训练营 4 期

系统学习 TypeScript(六)——认识接口

编程三昧

typescript 前端 3月月更

web安全之挖掘Linux内核漏洞

网络安全学海

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

假如让你来设计SSL/TLS协议

元闰子

网络安全 TLS 操作系统 ssl SSL/TLS协议

kube-scheduler源码分析(2)-核心处理逻辑分析

良凯尔

Kubernetes 容器 源码分析 Kubernetes, 云原生, eBPF

重学架构之千万级学生管理系统的考试试卷存储方案

陈华英

架构实战营 #架构实战营

编码的艺术-书籍推荐

Beaver

编码的艺术

中兴ZXR10 160智能集成多业务路由器快速安装指南,图文并茂!

Ethereal

Linux 中的 BusyBox 是什么?如何使用它?

Ethereal

高并发是一种架构思维模式

陈俊

高并发 技术架构 技术认知

Lyft微服务研发效能提升实践 | 4. 基于自动验收测试的部署门禁

俞凡

研发效能 大厂实践 lyft 3月月更

c语言结构体中的一个char数组怎么赋值?

北极的大企鹅

c 问题处理

容器化和编排有什么区别?

Ethereal

作业四

Geek_f3e842

架构实战营

低代码实现探索(三十五)模型页面vs工程化方式好

零道云-混合式低代码平台

我的第一个 Flutter 应用之旅

岛上码农

flutter ios 安卓 移动端开发 3月月更

Go学习笔记——复合数据结构之结构体

为自己带盐

Go 学习笔记 3月月更

2022 C语言学习最强干货分享,值得收藏

C语言与CPP编程

程序员 C语言 编程‘

【C语言】卍字通晓→函数+递归

謓泽

递归 C语言 函数 3月月更

java如何对接企业微信

经典鸡翅

3月月更

【高并发】两种异步模型与深度解析Future接口

冰河

Java 并发编程 多线程 高并发 异步编程

【架构训练营-模块四】

默光

架构训练营5期 存储架构

电商秒杀系统

swallowluo

架构实战营 #架构实战营 「架构实战营」

从头梳理,看看中国的 ICP 备案制度

白宦成

备案

文章是“自己的”好

BY林子

技术写作

站点可靠性工程之旅

俞凡

研发效能 SRE 3月月更

一款开源监控和警报平台:Prometheus

Ethereal

命令行管理 Linux服务器困难?别怕,今天介绍一款基于 Web 的Linux管理神器:Webmin

Ethereal

C语言中如何输出汉字;如何用C语言汉字编码输出汉字(超全版)

北极的大企鹅

c 问题处理

c语言怎么避免打印空数据?

北极的大企鹅

c 问题处理

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