线程终止后,内存映射对象是否会自动释放?

时间:2012-04-13 14:51:46

标签: c linux multithreading memory posix

我有几个简单的问题。如果我在C中创建一个新的子线程,在线程完成处理并终止后,请执行:

  • 内存映射对象是否“自动”释放? (我知道C没有垃圾收集器,但此时孩子已经终止了)

猜猜我的发布太快了。找到第二个问题的答案(供将来参考):http://www.ibm.com/developerworks/linux/library/l-memory-leaks/index.html?ca=drs-

  • 子进程可以将值返回给父线程吗? (这是否可以使用一些常见的例程?我知道子节点和父节点的内存空间是一样的吗?)

另外我想提一下,操作系统符合POSIX标准。

谢谢, 尼哥

2 个答案:

答案 0 :(得分:4)

正如您已经发现的那样,您的第一个问题的答案是“不”。这也适用于在堆上分配的对象。

进程中的线程之间没有父子关系,因此“父线程”毫无意义。但是,是的,线程可以在退出时返回一个值。线程顶层函数的原型是:

void *function(void *);

观察返回类型为void *。线程可以返回指针(对任何你喜欢的东西)。任何其他等待返回线程使用pthread_join()完成的线程将检索此返回值。

答案 1 :(得分:0)

当线程退出时,不会释放内存,文件句柄,互斥锁等资源。但是,当进程退出时会释放所有与进程相关的资源,其中包括所有这些类型的对象。