0

如果我分离 NSThread,Cocoa 会在单独的内存堆或内存区域中运行它吗?例如,如果我要分离一个线程,使用 malloc 创建一个大缓冲区,然后让线程退出,我会在某种自动线程清理中取回该内存,还是会泄漏?

如果我改用 POSIX 线程(pthread)呢?

请注意,我对 ObjC 分配或自动释放池不感兴趣,我说的是低级缓冲区,例如 int * foo = malloc(100000);

4

1 回答 1

6

一个 NSThread —— 像一个 pthread —— 将有一个单独的堆栈,但将与您任务中的其余线程共享相同的堆。各个任务的线程和堆是隔离的。

您描述的模式-在线程中分配,让线程退出-会泄漏;内存将无法恢复。

不管你使用什么样的线程。

对于非常有限的大小分配,您可以使用堆栈缓冲区,该缓冲区将在线程退出时获得。但是,线程的堆栈大小是有限的,如果您依赖大堆栈分配,很容易爆出堆栈并导致整个应用程序崩溃。

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

于 2009-09-25T06:22:28.833 回答