2012-08-08 135 views
1

我正在开发一个需要创建和删除大量线程的软件。关于linux内存问题的C++多线程程序

当我创建一个线程时,内存会增加,删除它时(通过使用命令ps -mo THREAD -p <pid>来确认),与程序/软件相关的内存不会减少(顶部命令)。结果,我用完了内存。

我已经使用Valgrind检查内存错误/泄漏,我找不到任何。这是在一个debian盒子上。请让我知道问题可能是什么。

+1

你如何理解,你内存不足?由于内存不足,使用'free -m'或程序崩溃? – 2012-08-08 11:04:05

+0

程序崩溃之前,可以通过顶部命令 – user883275 2012-08-09 14:44:50

回答

0

你是如何删除线程? 这里的笔记http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_join.3.html谈到在某些情况下需要调用加入来释放资源。

+0

识别调用加入没有做的伎俩,但调用pthread_detach()工作。谢谢 – user883275 2012-08-08 22:17:40

+0

如果你正在不断创建和删除大量的线程,你可能会考虑使用线程池来代替......我必须知道如果这适用于你的应用程序,虽然 – jcoder 2012-08-09 09:22:03

+0

是真的。目前我正在使用线程池。但我拥有大量不断变化的小型游泳池。调查是否会导致性能问题,如果是,那么会考虑改变设计。 – user883275 2012-08-09 10:30:13

0

您不会耗尽内存。

您在顶层命令中看到的“空闲内存”实际上不是在需要时可用的内存。 Linux内核尽可能使用/使用可用内存作为页面缓存。当进程需要内存时,内核可以丢弃该页面缓存并将该内存提供给进程。

换句话说:Linux使用的空闲内存,而不是只留空转周围...

使用free -m:在标行“ -/+缓冲区/缓存:”你会看到真正的量的内存可用于进程。