退出pthread线程会释放malloc分配的内存吗?

5
假设我使用pthread_create()启动了一个新线程并使用pthread_detach()将其分离。现在,在线程内部,我使用malloc()分配了一些内存。

当线程退出时,malloc()分配的内存会自动释放吗?

5个回答

8
  • 线程共享内存资源(至少 POSIX)。
  • malloc() / realloc() / free() 内存管理实际上不知道线程 (至少目前为止)。
  • 所以你应该把 malloc() 的结果当作简单的“资源”。它不是与线程相关联的。

现在答案显而易见,任何分配的内存都与线程没有关联,因此在线程退出时不会被 free()。当然,你可以提供一些特殊的处理机制,但这并不是自动完成的。

好处是你可以在线程之间传递内存分配,换句话说,在一个线程中分配这样的资源,然后在另一个线程中释放(对你有益还是无益取决于具体情况)。

希望这个解释对你有所帮助,把分配的内存指针看作任何进程级别的描述符。


4

不是的 - 仅通过显式的“free”才能释放malloc分配的内存。


2
或者当整个进程退出时 - 至少在您典型的桌面/服务器操作系统上。 - nos
不要概括。当你的程序退出时,它就被释放了。而且因为那从来没有发生过... - TimZaman

2

线程和进程的区别在于,进程拥有自己的资源(例如堆内存),而线程没有。如果您需要这种功能,那么您需要的是一个进程而不是线程。


1

我非常确定它不会,你必须使用free()。


1

不是的。虽然进程退出时会释放所有分配的内存,但线程退出时并非如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接