c语言os关闭文件,退出C应用程序时,已分配内存的内存是否自动释放?

假设我有以下C代码:

int main () {

int *p = malloc(10 * sizeof *p);

*p = 42;

return 0;  //Exiting without freeing the allocated memory

}

当我编译并执行该C程序时,即在内存中分配了一些空间后,我退出应用程序并终止进程后,分配的内存是否仍会分配(即,基本上占用了空间)?

清理内存的"好方式",不是因为您可能在没有受保护的内存的操作系统上运行(这是下面的主要建议),而是因为它增加了您发现内存泄漏并保持代码精简和 正确...

这取决于操作系统。当程序结束时,大多数现代(以及所有主要)操作系统将释放程序未释放的内存。

依靠这种做法是不好的做法,最好将其明确释放。问题不仅仅在于您的代码看起来不好。您可能会决定要将小程序集成到一个较大的,长期运行的程序中。然后过了一会儿,您必须花费数小时来跟踪内存泄漏。

依靠操作系统的功能还使代码的可移植性降低。

我曾经在嵌入式平台上遇到过win98,根据这种经验,我可以说程序关闭时它不会释放内存。

"您可能会决定要..."-但比较一下:YAGNI。

@ken;释放资源真的没有工作。

@Ken这是一个例子。此外,YAGNI和草率编码之间也有一条界线。不释放资源会越过它。 YAGNI原则还应应用于功能,而不是使程序正常工作的代码。 (并且不释放内存是一个错误)。

+1:最重要的要考虑的是,内存管理就如Yacoby所正确指出的那样:"操作系统的功能"。除非我没有记错,否则编程语言不会定义在程序执行之前或之后发生的事情。

轶事证据说明为什么显式释放可能是不好的:我写了一个命令行实用程序,它建立了一个巨大的链表;在退出时释放节点会延迟程序终止几秒钟(!),而如果不这样做,则OS会大量回收内存...

@Christoph我觉得操作系统如此之快地释放大型链表很奇怪,因为列表所占用的内存不会像大型阵列那样对齐,因此这似乎会导致性能问题。为什么不是这样?

支持虚拟内存的操作系统不会遇到显式释放内存的麻烦。它是虚拟的,只是不再存在。

D.Shawley:编程语言也没有定义系统调用或文件系统。仅使用编程语言规范定义的内容的程序是完全可移植的&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值