簡體   English   中英

在iOS上執行pthread_cancel時會釋放堆中的內存嗎?

[英]Will the memory in the heap be released when I do pthread_cancel on iOS?

可以說我在后台線程中分配了一些內存,也就是說,線程堆棧持有指向該內存的指針。 現在,我想通過調用pthread_cancel終止后台線程執行。 記憶會被釋放嗎? (我的平台是iOS,編譯器是gcc 4.2)

每個線程必然需要自己的堆棧; 但是,通常每個進程只有一個堆。 銷毀線程時,沒有自動機制釋放堆上分配的內存。 您最終遇到的就是內存泄漏。

通常,請避免使用pthread_cancel因為很難確保pthread_cancel可以安全運行。 而是建立某種機制,您可以在其中釋放一條消息給線程以破壞自身(在釋放其擁有的任何資源之后)。

線程退出后,線程堆棧將被刪除。 但是,不會有任何進程或代碼會查看您的線程堆棧並釋放您在堆上分配的對象的任何引用。 同樣,通常,線程堆棧不保存對內存的任何引用,線程堆棧是為線程分配的一個獨立空間,供通用程序堆棧使用,只要您在內存中,任何引用都將在堆棧上在將此類引用推入堆棧的函數內部,通常是因為您使用局部變量對其進行了引用。

默認情況下,否-請參閱其他答案,這些答案更特定於您要尋找的答案。 但是,有一個特定於線程的分配器; 如果您使用的是一個,就會知道。

不,它不會被自動刪除或釋放。 如果您很幸運,那么在運行收集器時可能會在某個時間收集垃圾。 文件句柄,共享內存ID,互斥對象等也不會被釋放/釋放。 異步取消對於例如仍由另一個線程擁有的數據進行純數學計算是安全的,但是總體上來說非常冒險-這就是為什么某些線程API已經嘗試並完全刪除了該函數的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM