我正在编写与操作系统无关的无锁队列,到目前为止效果很好,但是内存管理存在小问题。我不确定它的 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