2009-09-25 44 views
0

如果我將一個NSThread分開,Cocoa會在單獨的內存堆或內存區中運行它?例如,如果我要分離一個線程,請使用malloc創建一個大緩衝區,然後讓該線程退出,我是否會將某個自動線程清除回內存中,或者會被泄露?NSThread是否有單獨的堆? pthread(在iPhone上)

如果我使用POSIX線程(pthread),那麼呢?

請注意,我對ObjC分配或自動釋放池不感興趣,我正在討論低級緩衝區。 int * foo = malloc(100000);

回答

6

NSThread - 就像一個pthread - 將有一個單獨的堆棧,但將與您的任務中的其餘線程共享相同的堆。線程&個別任務堆是孤立的。

您描述的模式 - 在線程中的alloc,讓線程退出 - 將會泄漏;內存將不會被恢復。

無論你使用什麼樣的線程。

對於非常有限的大小分配,您可以使用堆棧緩衝區,當線程退出時將收穫堆棧緩衝區。但是,線程的堆棧大小是有限的,並且如果依賴大堆棧分配,則很容易導致堆棧崩潰並導致整個應用程序崩潰。

完成後使用malloc()和free()。

相關問題