内存优化
选择合适的内存管理算法会带来明显的性能提升
内存管理自底向上分为
1.操作系统内核的内存管理
2.glibc层使用系统调用维护的内存管理算法
3.应用程序从glibc动态分配内存后,根据应用程序本身的程序特性进行优化
优秀的通用内存分配器应具有的特性
额外的空间损耗尽量少
分配速度尽可能快
尽量避免内存碎片
缓存本地化友好
通用性,兼容性,可移植性,易调试
服务端程序使用glibc提供的malloc/free系列函数,而glibc使用的ptmalloc2
Ptmalloc
Ptmalloc采用主-从分配区的模式,当一个线程需要分配资源的时候,从链表中找到一个没加锁的分配区,在进行内存分配
线程数越多,Ptmalloc 出现锁竞争的概率就越高
内存分配还有TCMalloc 和JEMalloc
TCMalloc 是Google开源的一个内存管理库
TCMalloc为每个线程分配了一个线程本地ThreadCache
小对象(<=32K)从ThreadCache分配,大对象从CentralCache分配
ThreadCache不够用的时候,会从CentralCache中获取空间放到ThreadCache中
TCMalloc比较适合在多线程环境下分配 256KB 以下的内存
JEMalloc
JEMalloc是facebook推出的
与tcmalloc类似,每个线程同样在<32KB的时候无锁使用线程本地cache
Jemalloc和tcmalloc类似的线程本地缓存,避免锁的竞争
在多线程环境使用tcmalloc和jemalloc效果非常明显,Ptmalloc 更擅长大内存的分配
当线程数量固定,不会频繁创建退出的时候, 可以使用jemalloc;反之使用tcmalloc可能是更好的选择
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-05-29 pcl使用入门
2019-05-29 算法练习之二叉树的最小深度,路径总和
2019-05-29 PCL