C++ malloc下申请内存途径
五年前的时候,因为OOM导致进程无故被kill掉,也没有coredump,分析了好久,最后发现是因为因为glibc的free不一定会将内存归还OS,导致OOM,造成了上千万损失,当时心态差点崩了。
当时大概用了1个月的时间分析gblic下内存管理的源码
之前一直以为glibc只是一个中介,应用程序每次申请和释放内存都是通过glibc来操作,即应用程序每次调用malloc都是gblic向os申请内存,调用free都是gblic向os归还内存。但是,自从看了glibc源码之后,颠覆了我的认知,glibc下的内存管理器(ptmalloc),也可以说是一个内存池(我们暂且称之为内存池),应用程序的申请内存或者释放内存,都是在该内存池中实现,只有满足ptmalloc的某些特定条件之后,ptmalloc才会调用sys_trim函数,将内存归还操作系统。
glibc补充知识:
下面是针对glibc中内存管理主要函数malloc和free的实现原理
1、下面是application申请内存时候的宏观图

2、glibc的分配和释放远比我想象复杂的多,里面涉及到bin概念
fast bins,small bins,largebins,top chunk,mmaped chunk以及lastremainder chunk

内存的释放和分配都是在上面这些里面操作的
希望后面有时间精进一些关于这方面的理解
来源:https://www.zhihu.com/question/575065794/answer/2869761623
需要了解更多,请继续阅读
https://mp.weixin.qq.com/s/pdv5MMUQ9ACpeCpyGnxb1Q
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」