易游网-易游模拟器

 找回密码
 立即注册
查看: 2155|回复: 0

[C/C++] tcmalloc能解决什么问题?什么场景适合用tcmalloc

[复制链接]

3382

主题

3401

帖子

38

积分

超级版主

Rank: 8Rank: 8

积分
38

技术达人

发表于 2021-1-12 20:23:02 | 显示全部楼层 |阅读模式
malloc创建和free内存不够快,基于glibc 2.3的malloc,依赖于ptmalloc2,在2.8GHz Process4的机器上,创建小对象(大小小于等于32K),大致需要300ns,而对于tcmalloc来说,只需要大约50ns。所以速度快。
多线程中,tcmalloc可以减小锁竞争,对于小对象来说,几乎零竞争,而对于大对象来说,tcmalloc会尝试使用细粒度和高效的自旋锁;而malloc,ptmalloc2在创建每个线程时候,会为每个线程分配空间,有一个问题就是,线程之前的内存是不会重复利用的;
效率,tcmalloc对于小对象的空间的利用率更高,比如当需要使用空间为8N*1.01bytes的内存空间,那么tcmalloc只需要创建8N bytes的对象,也就是说有百分之1的空间开销。而ptmalloc2则需要使用16N bytes。

TCMalloc工作原理是什么?
​TCMalloc为每个线程分配一个线程本地缓存。线程本地缓存满足了较小的分配。根据需要将对象从中心数据结构移动到线程本地缓存中,并使用定期的垃圾收集将内存从线程本地缓存迁移回中心数据结构中。

当所分配的内存比较小的时候,推荐使用tcmalloc,而ptmalloc2则适用性更强。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-11-27 09:56 , Processed in 0.017142 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表