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之間及其不平衡,加上苛刻的內存歸還條件,在整個程序運行過程中,占用內存幾乎從未下降過,區別僅僅是緩慢上漲和快速上漲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM