gpt4 book ai didi

unix - malloc + fork 会造成内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-02 03:18:45 25 4
gpt4 key购买 nike

  1. 父进程执行 malloc()
  2. fork
  3. 父级修改分配的 block
  4. CoW 启动并创建修改后的 block 的一个副本,同时保留旧副本
  5. 子进程不知道也不关心父进程的内容,也不会对其副本调用 free()
  6. 内存泄漏!

我说得对吗?我错了吗?如果是后者,实际上会发生什么?

最佳答案

malloc()fork() 都不会造成泄漏 - 所以我认为你错了。

父级拥有自己的已分配 block 副本。它可以随心所欲地使用它。子进程拥有自己的已分配 block 副本。它也可以按照自己的意愿行事。如果子进程忽略了该 block ,则还不是泄漏。如果子进程随意践踏指针,或者从保存唯一指向已分配内存的指针的函数返回而不首先释放它,就会导致泄漏。但问题不在于 fork()malloc()

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

请注意,如果子进程使用 exec*() 系列函数之一,则原始进程分配的所有内存都会被释放。新进程获得分配的新内存。同样,如果子进程退出,那么内存也会被释放。操作系统不存在丢失内存的长期风险。

关于unix - malloc + fork 会造成内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com