Memory 释放多个大内存束是否值得?

Memory 释放多个大内存束是否值得?,memory,memory-management,Memory,Memory Management,比如说,我写了一个程序,在初始化时分配一堆大对象。然后程序运行一段时间,可能是无限期的,到了终止的时候,每个大型初始化对象都会被释放 因此,我的问题是,在程序生命周期结束时分别手动释放每个内存块需要更长的时间,还是让系统卸载程序并同时释放系统提供给程序的所有虚拟内存更好 它是否安全和/或更快?此外,如果是安全的,编译器在设置为优化时是否仍会这样做?如果程序退出,大多数操作系统都会在退出时释放内存,但更大的问题是,为什么您希望它必须这样做 速度快吗?有时凭记忆很难说。我想,不管怎样,打破良好的编码

比如说,我写了一个程序,在初始化时分配一堆大对象。然后程序运行一段时间,可能是无限期的,到了终止的时候,每个大型初始化对象都会被释放

因此,我的问题是,在程序生命周期结束时分别手动释放每个内存块需要更长的时间,还是让系统卸载程序并同时释放系统提供给程序的所有虚拟内存更好


它是否安全和/或更快?此外,如果是安全的,编译器在设置为优化时是否仍会这样做?

如果程序退出,大多数操作系统都会在退出时释放内存,但更大的问题是,为什么您希望它必须这样做

速度快吗?有时凭记忆很难说。我想,不管怎样,打破良好的编码实践是不值得的

安全吗?定义安全。。。你的操作系统会崩溃吗?可能不会。您的代码是否容易出现内存泄漏或其他问题?当然会的。实际上,您基本上是在告诉它您希望内存泄漏

最好的做法是当你完成记忆时总是释放它。用C和C++,每个有错的或新的内存块都应该有相应的自由或删除。 依赖操作系统来释放内存是个坏主意,因为它不仅会让代码看起来很糟糕,而且会降低可移植性,而且如果该程序曾经集成到另一个程序中,那么你可能会在数小时内跟踪内存泄漏


所以,简短的回答是,总是手工操作

>P>具有短维护寿命的程序是“Ext())内存分配的好候选,并让内核排序。“但是,如果程序将持续数月以上,则必须考虑维护负担。

例如,考虑到某人可能意识到程序中需要一个后续阶段,一些数据不需要,或者不需要在内存中。他们现在必须找到如何释放内存、正确删除过时引用等方法。

1)当应用程序终止时,并非所有系统都会为您释放内存。当然,大多数现代桌面系统都会这样做,因此,如果您打算只在Linux或Mac(或Windows)上运行程序,您可以将解除分配留给系统

2) 通常需要对终止时的数据进行一些操作,而不仅仅是释放内存。所以,如果您打算开发这样的程序设计,使得最终很难手动解除分配对象,那么以后可能需要在退出之前执行一些代码,您将面临一个难题

2')有时,即使您认为您的程序将一直需要一些对象,直到死机,但稍后您可能希望从程序中创建一个库或更改项目以加载和卸载大型对象,而程序的糟糕设计将使这很难或不可能

3) 此外,程序释放性能取决于您将在程序中使用的分配器的实现。系统解除分配取决于系统内存管理,即使对于单个系统,也可以有多个实现。因此,如果您面临分配/解除分配性能问题,那么您希望开发更好的分配器,而不是寄希望于系统


4) 所以我的观点是:当你在最后手动释放内存时,你总是走在正确的道路上。如果您不这样做,可能在某些情况下您会得到一些不明确的好处,但很可能您迟早会遇到问题。

了解您使用的语言会很有帮助。C++是一个关于任何语言的一般问题,在这里你可以自己管理内存。是的,C或C++是我所想到的主要语言。