use*_*501 2 c++ memory-management
如果我在执行期间分配一些内存但从不调用delete并且程序终止会发生什么?操作系统是否会释放我分配的所有内存,没有内存会被"浪费"?或者在计算机重新启动之前我会丢失一部分内存吗?
显然我知道良好的编码实践是确保你删除你不需要的东西,所以我不只是问"有什么意义delete"; 我只是想知道我的RAM里面发生了什么.
这全都取决于程序的功能以及使用的内存量-在任何给定时间以及整个运行期间中,总的来说是这样。
假设您编写了一个邮件服务器,该服务器分配内存来容纳收到的每封电子邮件。但实际上并不需要存储所有通过它的电子邮件。因此,在接收和转发电子邮件几天后,邮件服务器无法分配更多的内存,它已经消耗了每个可用的内存字节-但由于该电子邮件不再使用,因此实际上并没有对该内存做任何有用的事情-他们已经得到处理。
另一方面,如果我们编写的邮件服务器程序分配了1MB的缓冲区以读取电子邮件,对其进行处理,并且在完成后将内存重用于另一封电子邮件,那么释放该内存毫无意义。 ,曾经。
如果我们编写一个程序来读取文件,然后将整个文件加载到内存中,并在计算完所有字母以用于统计目的后打印出统计信息并退出,那么是否分配大量内存并不真正物。
当然,所有这些都假定对newSIMPLY 的调用只是分配内存。如果对象的构造函数执行更复杂的操作(例如打开文件,获取锁或其他操作),那么如果不调用析构函数,则可能很快就会发生各种不良情况。
该操作系统(对于常用的操作系统,例如Linux,MacOS,iOS,其他Unix系统,Windows,DOS,OS / 2等)将释放应用程序使用的内存。