maokelong / cmalloc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

简单的 threadtest 就会引起严重的内存泄漏问题

maokelong opened this issue · comments

问题在执行 cpptest1 测试用例时出现。

该测试用例申请 4(nthreads)个线程,每个线程迭代申请大小为 8B(size)的小块内存,返回地址记录在本地内存池中,迭代100000(nobjects)/ 4 次后一次性释放所有内存。申请 / 释放过程也会迭代 10000 (niterations)次。

运行后 RSS 快速增加,很快就增长到 1GB 以上。

经测试,发现引导程序(main前)会申请部分内存,线程创建程序也会申请部分内存,但二者所申请的内存很少,总量低于 1MB。

现初步怀疑是内存释放的问题 ,具体原因有待进一步分析。

系历史遗留问题所致。

在最初编码的时候,由于我对二维动态数组的理解不够到位,导致「reusable_sbs」的初始化及使用其实都是错误的,但不知为何这份代码能够在ubuntu下顺利运行,而在centos下会崩溃。在进行修正的时候曾经调换过二维数组各维的含义,即从[core id][size class]切换到[size class][core id],但是在调整的时候遗漏了一处。

在testcase3的帮助下我定位到了这个问题,并将
reusable_list = &GLOBAL_POOL.meta_pool.reusable_sbs[get_core_id()][sc];
修正为
reusable_list = &GLOBAL_POOL.meta_pool.reusable_sbs[sc][get_core_id()];

85c0a6c