tcmalloc相关内存未释放

https://blog.csdn.net/lantianjialiang/article/details/50510937

https://www.cnblogs.com/scotth/p/4285480.html

tcmalloc内存未释放可做一下几个操作

解决方法:

1. 不使用cache,将用-DSMALL_BUT_SLOW 将tcmalloc从新编译一遍;

2. 检查自己的代码,看看那些地方的连续内存,只释放了一部分。

3.调用tcmalloc接口,立刻释放

glibc内存释放逻辑

1. glibc在多线程内存分配的场景下为了减少lock contention,会new出很多arena出来,每个线程都有自己默认的arena,但是内存申请时如果默认arena被占用,则round-robin到下一个arena。

2. 每个arena的空间不可直接共享和互相借用,除非通过主arena释放给操作系统然后被各个辅助arena重新申请。

3. glibc归还内存给OS有一个很苛刻的条件就是top chunk必须是free的,否则,即使应用程序已经释放了大片内存,glibc也不会将这些内存归还给OS。

在我们的场景中常常是thread A alloc一片空间,最后由thread B free,所以这就造成各个arena之间及其不平衡,加上苛刻的内存归还条件,在整个程序运行过程中,占用内存几乎从未下降过,区别仅仅是缓慢上涨和快速上涨。

原文链接: https://www.cnblogs.com/wangshaowei/p/14077227.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    tcmalloc相关内存未释放

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/391107

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月31日 上午10:26
下一篇 2023年3月31日 上午10:26

相关推荐