QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

评论

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

AlDente Pro:苹果电脑电池寿命延长工具

Rose

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.7版已发布

JackJiang

MobileIMSDK 即时通讯;IM;网络编程 RainbowChat

CNCC | 超强阵容!CCF-网易雷火联合基金研讨会嘉宾率先揭晓

网易伏羲

人工智能 网易伏羲 cncc

如何用支付宝实现靠脸吃饭

盐焗代码虾

支付宝 刷脸支付 一脸通行

基于Ascend C的Matmul算子性能优化最佳实践

华为云开发者联盟

人工智能 性能优化 算子 Ascend

【质量视角】可观测性背景下的质量保障思路

京东科技开发者

为什么说“全面绩效”是企业管理的必选项?

ToB行业头条

Final Cut Pro:视频剪辑新纪元,创意无限!

Rose

IPQ9574,IPQ5322,IPQ9570-WiFi 7 chip diversity: Performance, application and market differences analysis

wifi6-yiyi

5G router WiFi7

QCA9880 vs QCA9882: Finding the Perfect Wi-Fi Solution for Your Business

wallyslilly

QCA9880 QCA9882

免费BT资源下载利器 BitComet(比特彗星)

Rose

RAG vs 长上下文 LLMs:谁主沉浮?

Baihai IDP

程序员 AI LLMs rag Baihai IDP

Adobe Creative Cloud 创意应用软件 可解决adobe安装过程中的大部分问题

Rose

强大的局域网远程播放 nPlayer for Mac v1.4.0中文激活版

Rose

2024海南等保测评机构名单汇总

行云管家

等保 等保测评 海南

Excelize 开源基础库 2.9.0 版本正式发布

xuri

golang 开源 办公自动化 Excelize 办公软件

全局视角看技术-Java多线程演进史

京东科技开发者

阿里架构师:天天高并发,这个时代达不到百万以上的并发量都不叫高并发!!!

程序员高级码农

多线程 架构师 Java高并发 Java’ 高并发‘’

哪里有Axure RP 10激活码? Axure RP 10 for mac永久授权码分享

Rose

在Abaqus中施加恒定载荷应选择静态还是动态分析步?

思茂信息

载荷 abaqus 有限元分析

Navicat Premium:数据库全能管家,管理无忧!

Rose

大模型时代的数据治理之道|StartDT Talk

奇点云

人工智能 大数据 AI 数据治理 大模型

淘宝商品评论API:获取商品升级迭代后的用户反馈

技术冰糖葫芦

API 接口 API 文档 API 测试 API 性能测试

火山引擎数智平台VeDI:A/B实验互斥域流量分配体系上线

字节跳动数据平台

ab测试

软件测试学习笔记丨人工智能 | mixtral大模型

测试人

人工智能 软件测试

GreatSQL 在SQL中使用 HINT 语法修改会话变量

GreatSQL

数据库

使用豆包MarsCode 来处理 Excel 的数据吧!

豆包MarsCode

人工智能 程序员 AI

用户的声音| 出色的表格解析能力!TextIn文档解析助力金融信息化企业数据底座建设

合合技术团队

金融 #科技

adobe ai 2021功能介绍 及破解安装教程(Mac/win)

Rose

Caffeine学习笔记

京东科技开发者

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