Memory management 是否有合理的理由在短命计划中释放分配的资源?

Memory management 是否有合理的理由在短命计划中释放分配的资源?,memory-management,language-agnostic,resources,Memory Management,Language Agnostic,Resources,有一类短期生活计划正以这种方式运作: 1. Allocate some resources - memory, open files, etc. 2. Make some computations 3. Free allocated resources 4. Terminate 同样的问题也适用于该类型长寿命计划的终止阶段: 1. Do some job 2. If not the end - goto 1 3. Free the resources still allocated 4. Te

有一类短期生活计划正以这种方式运作:

1. Allocate some resources - memory, open files, etc.
2. Make some computations
3. Free allocated resources
4. Terminate
同样的问题也适用于该类型长寿命计划的终止阶段:

1. Do some job
2. If not the end - goto 1
3. Free the resources still allocated
4. Terminate
现在,我们知道操作系统本身总是在程序终止后进行清理。如果操作系统能够更进一步地释放分配的内存,并且同样成功,那么我们的代码是否真的需要清理分配的内存

在上面的例子中,我们可以安全地省略第3点吗?毕竟是时间和代码

澄清1:我不是说代码可以在不同上下文中被其他人重用的库。我问的是已经完成的程序,上面的结构是否足够干净


澄清2:之所以称为“良好实践”,是因为它们旨在防止“不良影响”。但如果不可能产生不良影响,这些做法是否仍然“好”?或者仅仅是“传统”?

你应该自己打扫干净。你永远不知道什么时候有人会把你的代码用在不同的情况下


编写一个完整的解决方案在任何情况下都是正确的。

您应该在自己完成后进行清理。你永远不知道什么时候有人会把你的代码用在不同的情况下


编写一个完整的解决方案在任何情况下都是正确的。

您应该在自己完成后进行清理。你永远不知道什么时候有人会把你的代码用在不同的情况下


编写一个完整的解决方案在任何情况下都是正确的。

您应该在自己完成后进行清理。你永远不知道什么时候有人会把你的代码用在不同的情况下


编写一个完整的解决方案在任何情况下都是正确的。这在很大程度上取决于操作系统。大多数现代操作系统会在程序终止时自动释放所有资源,这意味着在退出程序之前不需要释放任何资源

但情况并非总是如此,特别是某些类型的嵌入式操作系统将采用更简单的方法


当然,当您(或者更重要的是,其他人)决定将代码从短期运行的进程转换为长期运行的程序时,它也不会很好地工作

这在很大程度上取决于操作系统。大多数现代操作系统会在程序终止时自动释放所有资源,这意味着在退出程序之前不需要释放任何资源

但情况并非总是如此,特别是某些类型的嵌入式操作系统将采用更简单的方法


当然,当您(或者更重要的是,其他人)决定将代码从短期运行的进程转换为长期运行的程序时,它也不会很好地工作

这在很大程度上取决于操作系统。大多数现代操作系统会在程序终止时自动释放所有资源,这意味着在退出程序之前不需要释放任何资源

但情况并非总是如此,特别是某些类型的嵌入式操作系统将采用更简单的方法


当然,当您(或者更重要的是,其他人)决定将代码从短期运行的进程转换为长期运行的程序时,它也不会很好地工作

这在很大程度上取决于操作系统。大多数现代操作系统会在程序终止时自动释放所有资源,这意味着在退出程序之前不需要释放任何资源

但情况并非总是如此,特别是某些类型的嵌入式操作系统将采用更简单的方法


当然,当您(或者更重要的是,其他人)决定将代码从短期运行的进程转换为长期运行的程序时,它也不会很好地工作

我也曾在某个时候问过自己这个问题,经过一场小辩论,我得出了结论:


在以后决定在更大的项目中重用代码时,释放资源是一种很好的做法。没有什么比调试旧代码更糟糕的了。马上做,坚持好的编程实践。

我也曾在某个时候问过自己这个问题,经过一场小辩论,我得出了结论:


在以后决定在更大的项目中重用代码时,释放资源是一种很好的做法。没有什么比调试旧代码更糟糕的了。马上做,坚持好的编程实践。

我也曾在某个时候问过自己这个问题,经过一场小辩论,我得出了结论:


在以后决定在更大的项目中重用代码时,释放资源是一种很好的做法。没有什么比调试旧代码更糟糕的了。马上做,坚持好的编程实践。

我也曾在某个时候问过自己这个问题,经过一场小辩论,我得出了结论:


在以后决定在更大的项目中重用代码时,释放资源是一种很好的做法。没有什么比调试旧代码更糟糕的了。马上去做,坚持好的编程实践。

我认为没有真正有意义的语言不可知论的答案

在使用垃圾收集器的语言中,GC不太可能在退出之前自动运行,手动强制它运行通常是毫无意义的(即使我们假设您使用的是允许您这样做的语言/库)

在C++中,资源获取几乎总是发生在构造函数中,并且释放该资源通常应该发生在匹配析构函数中。在这种情况下,在没有适当的析构函数的情况下编写代码几乎肯定是一个bug——您只是编写了一个不完整的类,并希望