gpt4 book ai didi

c - 在 fork 它的 child 之后,一个守护进程的 parent 是否应该 free() 内存?

转载 作者:太空狗 更新时间:2023-10-29 15:39:45 36 4
gpt4 key购买 nike

假设我们有这样的代码:

int main() {
FILE *f_conf = fopen("conf.conf");
/* File Open Error Handling */

char *buf = malloc(128);
/* Malloc Error Handling */

fgets(buf, 128, f_conf);
fclose(f_conf);

pid_t pid = fork()
/* Fork Error Handling */

if (pid) {
free(buf); /* Should this free be called? */
return 0;
}

while (1) {
/* Do Stuff */
}

return 0;
}

一般来说,我更喜欢在返回之前释放内存,因为对性能的任何影响都是最小的,并且它有助于自动工具检测内存泄漏。也就是说,这里的性能/最佳实践对我来说不太清楚,因为在守护进程上运行这些工具毫无意义。这引出了两个问题:

  1. 在返回之前释放父进程的内存(例如 *buf)会影响子进程的性能吗?我认为通过写时复制的实现方式可能会有一些(积极的或消极的)。
  2. parent 释放剩余资源是否被认为是好的做法?

最佳答案

我认为将 thing 的分配限制在它有效的可执行区域是一个很好的做法。对我来说,免费是文档的一部分——这个东西不再有效或不可访问。在所有的编程中,简洁产生清晰;明确的方案可以改进和优化;不连贯的不能。

就跨叉的性能而言,如果您要测量页面缓存效果,您可能处在一个非常黑暗的地方。从根本上说,进程的页面将指向相同的底层页面;如果一个人放弃该页面,另一个人将免费获得它 [如果 refcount == 1,则复制没有意义]。实际上,所发生的只是一些链表节点得到更新,您无法真正衡量它。

就是说,如果您正在为整个 DVD 或其他东西进行分配,是的,您可以考虑将其映射为共享

关于c - 在 fork 它的 child 之后,一个守护进程的 parent 是否应该 free() 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351273/

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