2012-08-08 69 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:在標行「 -/+緩衝區/緩存:」你會看到真正的量的內存可用於進程。