【发布时间】:2021-07-18 22:01:51
【问题描述】:
我正在编写独立于操作系统的无锁队列,到目前为止效果很好,但内存管理存在小问题。我不确定它的 gcc 问题还是我的问题。问题:将元素添加到列表时内存会增加,但从列表中删除元素时 (free(elementPointer);) 内存使用量不会改变。
但是当我使用 pthreads 时,N 个生产者和 M 个消费者 (1<N<20, 1<M<20) 内存使用量一直约为 ~10mb(尝试添加和删除 ~10kk 元素时),所以看起来免费正在工作。
有趣的是,在 VS 2010(相同的代码,没有线程)中,free 工作正常,内存被释放(监视任务管理器)。
我做了测试,加了1kk个元素,全部加完后,一个个去掉所有元素(没有线程)。
Linux - 0.08 秒
Windows ~57 秒
Linux(无免费)- 0.07 秒
Windows(无免费)- 0.9 秒
那么,问题是,为什么在不使用线程时 Linux C 中不释放内存? 如有必要,我可以发布代码。
GCC 版本:4.4.3
【问题讨论】:
-
检查内存泄漏等的更好方法是使用 Valgrind(仅限 Linux)或 Purify。
标签: c linux multithreading pthreads