malloc + fork是否会造成内存泄漏?

时间:2015-07-05 22:55:32

标签: unix malloc fork

  1. 父进程执行malloc()
  2. parent修改已分配的块
  3. 在保持旧副本到位的情况下,CoW开始并创建一个已修改块的副本
  4. 孩子不知道或不关心父母的东西,也不会在其副本上拨打免费()
  5. 内存泄漏!
  6. 我说错了吗?我错了吗?如果后者究竟发生了什么?

1 个答案:

答案 0 :(得分:4)

malloc()fork()都没有造成泄密 - 所以我认为你错了。

父级具有自己的已分配块副本。它可以随心所欲地做到。孩子有自己的分配块副本。它也可以随心所欲地做到。如果孩子忽略了阻塞,那么它还不是泄漏。如果孩子轻易地践踏指针,或者从保存指向已分配内存的唯一指针的函数返回而不首先释放它,则会导致泄漏。但问题不在于fork()malloc()

请记住,相同的代码在fork()之后运行 - 进程之间的主要区别是PID和fork()的返回值。其他所有内容(几乎所有其他内容 - 请参阅详细信息的fork()的POSIX规范)都是相同的。因此,如果代码泄漏,这是程序员引入的错误 - 它不是malloc()fork()的错误。

请注意,如果孩子使用exec*()系列函数之一,则会释放原始进程中分配的所有内存。新进程分配了新内存。同样,如果孩子退出,那么内存将被释放。 O / S失去记忆的长期风险并不存在。