写点什么

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

评论

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

惊艳!四份SpringSecurity笔记带你玩转金三银四的面试题集!

996小迁

Java 架构 面试 springsecurity 笔记

面试大揭秘!从技术面被“虐”到征服CTO,全凭这份强到离谱的pdf

Java架构之路

Java 程序员 架构 面试 编程语言

独角兽余额宝(Java现场面试48题):性能调优+索引+Mysql+缓存+HashMap+GC

Java架构之路

Java 程序员 架构 面试 编程语言

多熟悉一门编程语言看法

superman

用 flomo 管理自己的奇思妙想瀑布流

Guanngxu

别小看 Log 日志,它难住了我们组的架构师

Java架构师迁哥

架构师训练营 1 期:大作业(二)

piercebn

架构师训练营第 1 期

架构师训练营 第十二周作业

文江

面向垂直领域的OpenIE图谱构建技术

DataFunTalk

同城快递系统架构

Jacky.Chen

消失的同事

石君

时代发展 28天写作

智能合约DAPP软件APP开发|智能合约DAPP系统开发

系统开发

OOP: DIP与LSP

Iris

面向对象 架构训练营

芯片破壁者(二十五):从全球贸易网络看芯片博弈

脑极体

移动开发属于哪个领域!2021年Android春招面试经历,详细的Android学习指南

欢喜学安卓

android 程序员 面试 移动开发

网卡分身技术,你 Get 了吗

Linux云计算网络

网络

「学习笔记」深入理解ThreadLocal

Java架构师迁哥

高频量化交易机器人系统开发技术

薇電13242772558

区块链 策略模式

精选算法面试-链表(判断环)

李孟聊AI

算法 链表 28天写作

智慧警务,大数据分析决策平台建设方案

t13823115967

大数据

价值 - 风险管理(二)

石云升

读书笔记 风险管理 28天写作 价值

MySQL慢查询(中):正确的处理姿势,你get到了吗?

架构精进之路

MySQL MySQL优化 MySQL架构 28天写作

面向对象设计总结

Iris

面向对象

大作业 1

郎哲

京东T7团队技术4面:线程池+索引+Spring +分布式锁+Mysql+项目等

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营第十二周作业

丁乐洪

案例研究之聊聊 QLExpress 源码 (一)

小诚信驿站

聊聊架构 规则引擎 28天写作 QLExpress源码 聊聊源码

链上数据存储,区块链底层技术落地

t13823115967

区块链落地

架构师第 6 课作业及学习总结

小诗

「架构师训练营第 1 期」

学习安卓开发!View的这些基础知识你必须要知道,Android岗

欢喜学安卓

android 程序员 面试 移动开发

Go的声明语法为什么是这样

Rayjun

Go 语言

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