首页 > 系统相关 >C++ malloc下申请内存途径

C++ malloc下申请内存途径

时间:2023-02-01 15:00:58浏览次数:64  
标签:malloc C++ glibc 申请 free gblic 内存

之前就因为glibc的free不一定会将内存归还OS,导致OOM,造成了上千万损失,当时心态差点崩了

五年前的时候,因为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中内存管理主要函数mallocfree的实现原理

 

1、下面是application申请内存时候的宏观图

2、glibc的分配和释放远比我想象复杂的多,里面涉及到bin概念

fast bins,small bins,largebins,top chunk,mmaped chunk以及lastremainder chunk

内存的释放和分配都是在上面这些里面操作的

3、下面是malloc流程图

malloc

4、free流程如下图

free

5、用了一个月分析代码,然后用了三周时间来写对gblic内存管理进行整理

 

希望后面有时间精进一些关于这方面的理解

来源:https://www.zhihu.com/question/575065794/answer/2869761623

需要了解更多,请继续阅读

https://mp.weixin.qq.com/s/pdv5MMUQ9ACpeCpyGnxb1Q

标签:malloc,C++,glibc,申请,free,gblic,内存
From: https://www.cnblogs.com/woodx/p/17082646.html

相关文章