2010-11-09 24 views
0

我在我的應用程序中使用timer_create函數來定時器功能。 發生超時時,會創建一個新線程。那時候我的應用程序的內存使用量增加了大約11mb。我也將線程屬性設置爲PTHREAD_CREATE_DETACHED。任何幫助表示讚賞。我也想知道在超時時創建的線程還活着多久?posix timer_create()函數導致linux上的內存泄漏

+1

代碼比語言更響亮 – 2010-11-09 15:44:17

回答

0

這個問題沒有代碼沒有意義。

timer_create不會自行創建線程。你的代碼必須是製作線程。

您的內存泄漏幾乎肯定是由代碼中的錯誤引起的。由於我們看不到您的代碼,因此我們無法幫助解決問題。

+2

不幸的是,POSIX計時器*做*在計時器到期時創建線程,如果你使用'SIGEV_THREAD'事件通知機制。這是一個稍微瘋狂的API。 – caf 2010-11-24 00:37:59

0

,直到退出它的線程函數任何線程保持「積極」發現內存泄漏的寶貴工具。你的泄漏很可能是線程的堆棧 - 直到你調用thread_join或者其他東西之後纔會消失。

1

我懷疑它和你的計時器有什麼關係。

如果您創建一個新線程,該線程需要堆棧空間。據我所知,這個內存在線程創建時被分配一次,因爲它必須是連續的。

這可能聽起來像很多浪費的內存,但事實並非如此。首先,如果需要,可以降低堆棧大小,其次:只分配進程內的地址空間。物理內存只有在使用堆棧時纔會被分配。