0

There is a class of short living programs that are working this way:

1. Allocate some resources - memory, open files, etc.
2. Make some computations
3. Free allocated resources
4. Terminate

The same question is valid for the termination stages of long lived programs of the type:

1. Do some job
2. If not the end - goto 1
3. Free the resources still allocated
4. Terminate

Now, we know that the OS itself always cleans after the program termination. Is it really necessary to clean the allocated memory by our code, if it will be, with the same success, freed by the OS, one step further?

Can we safely omit the point 3 in the above examples? It is time and code after all.

Clarification 1: I am not talking about libraries where the code can be reused by someone in different context. I am asking about the finished programs, where the above structure is clean enough.

Clarification 2: The "good practices" are called so, because they are intended to prevent "bad effects". But if the bad effect is impossible to happen, are these practices still "good"? Or it is simply "tradition"?

4

4 回答 4

2

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

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

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

于 2013-10-14T16:47:40.143 回答
1

我认为对此没有真正有意义的与语言无关的答案。

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

在 C++ 中,资源获取几乎总是发生在构造函数中,而释放资源通常应该发生在匹配的析构函数中。在这种情况下,在没有适当析构函数的情况下编写代码几乎肯定是一个错误——您只是在编写一个不完整的类,并希望它只会以防止该错误出现的方式使用。

在 C 或任何其他类似的地方,您必须手动进行清理,我更喜欢编写代码来进行最终清理,但通常将其注释掉。这可以提高速度和代码大小,并确保代码中没有任何错误以释放数据(对于未编译导致问题的代码来说非常困难)。

于 2013-10-21T06:27:36.520 回答
0

你应该总是自己清理。您永远无法判断何时有人会拿走您的代码并在不同的情况下使用它。

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

于 2013-10-14T16:47:27.050 回答
0

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

如果您决定稍后在更大的项目中重用该代码,最好释放资源。没有什么比调试旧代码更糟糕的了。立即执行并坚持良好的编程习惯。

于 2013-10-14T16:48:12.800 回答