小编典典

当使用free()时,内存使用不会减少

linux

我正在编写独立于操作系统的无锁队列,到目前为止,它工作得很好,但是内存管理方面的问题很小。我不确定它的gcc问题还是我的。问题:将元素添加到列表时,内存增加,但是从列表中删除元素(free(elementPointer);)时,内存使用率没有变化。

但是,当我使用pthreads时,N个生产者和M个消费者的 (1<N<20, 1<M<20)内存使用量始终约为10mb(当尝试添加和删除〜10kk元素时),因此看起来自由工作了。

有趣的是,在VS 2010中(相同的代码,没有线程),免费工作正常,释放了内存(受监视的任务管理器)。

我进行了测试,添加了1kk元素,添加了所有元素之后,将所有元素一一删除(没有线程)。

Linux-0.08秒

Windows〜57秒

Linux(免费)-0.07秒

Windows(免费)-0.9秒

因此,问题是,当不使用线程时,为什么在Linux C中不释放内存?如果需要,我可以发布代码。

GCC版本:4.4.3


阅读 479

收藏
2020-06-03

共1个答案

小编典典

在许多操作系统上,free()不会再次使内存可供OS使用,而只能“用于”对的新调用malloc()。这就是为什么您看不到内存使用量从外部下降的原因,但是当您通过线程增加新分配的数量时,内存将被重新使用,因此总使用量不会浪费。

2020-06-03