2009-11-06 22 views
5

比方说,我已经开始与pthread_create()新线程,然后使用pthread_detach()分离它。现在,从内的的线程上下文中,我使用malloc()分配了一些内存。退出pthread发布malloced内存?

当线程退出,将malloc'ed内存自动被删除?

回答

8
  • 线程共享的存储器资源(至少POSIX)。
  • 的malloc()/ realloc的()/ free()的内存管理实际上不是知道有关线程 (至少现在)。
  • 所以你应该把malloc()的结果看作简单的'资源'。它不是线程链接的。

所以,现在的答案应该是显而易见的,分配的任何内存没有联动线程,以便 它不是免费的()'上线D出口。当然你可以提供一些特殊的操作,但它不会自动完成。

的这个好的一面是可以传递换句话说线程之间的内存分配一个线程分配这些资源,然后从另一个免费的(是对你有好处还是没有)。

希望这将是有益的解释,想想分配的内存指针作为任何进程级别描述符。

1

我很确定它没有,你必须使用免费()。

4

否 - malloc的内存只能通过显式的'free'释放。

+2

或者当整个过程退出时 - 至少在典型的桌面/服务器操作系统上。 – nos 2009-11-06 19:54:44

+0

不要一概而论。当你的程序退出时,它被释放。而且,因为_ever_发生.. – TimZaman 2015-07-25 19:22:38

1

号而当进程退出,这同样不是线程退出时,任何真正的malloc内存被释放。

2

这几乎是线程和进程之间的差异,进程拥有像堆内存线程那样的资源。如果你想要那个功能,那么你需要一个进程而不是一个线程。