我说错了吗?我错了吗?如果后者究竟发生了什么?
答案 0 :(得分:4)
malloc()
和fork()
都没有造成泄密 - 所以我认为你错了。
父级具有自己的已分配块副本。它可以随心所欲地做到。孩子有自己的分配块副本。它也可以随心所欲地做到。如果孩子忽略了阻塞,那么它还不是泄漏。如果孩子轻易地践踏指针,或者从保存指向已分配内存的唯一指针的函数返回而不首先释放它,则会导致泄漏。但问题不在于fork()
或malloc()
。
请记住,相同的代码在fork()
之后运行 - 进程之间的主要区别是PID和fork()
的返回值。其他所有内容(几乎所有其他内容 - 请参阅详细信息的fork()
的POSIX规范)都是相同的。因此,如果代码泄漏,这是程序员引入的错误 - 它不是malloc()
或fork()
的错误。
请注意,如果孩子使用exec*()
系列函数之一,则会释放原始进程中分配的所有内存。新进程分配了新内存。同样,如果孩子退出,那么内存将被释放。 O / S失去记忆的长期风险并不存在。