15 c memory malloc dynamic-memory-allocation
如果我在我的程序中使用动态分配内存malloc()但在程序运行时没有释放内存,那么在程序终止后是否会释放动态分配的内存?
或者如果它没有被释放,并且我一遍又一遍地执行相同的程序,它每次都会分配不同的内存块吗?如果是这样的话,我应该如何释放这段记忆?
注意:我能想到的一个答案是重新启动我正在执行程序的机器.但是,如果我在远程计算机上执行程序并且重启不是一个选项?
sta*_*ica 19
简短回答:一旦您的进程终止,任何合理的操作系统都将释放该进程分配的所有内存.所以不,当您多次重新启动进程时,内存分配不会累积.
进程和内存管理通常是操作系统的责任,因此在进程终止后是否释放已分配的内存实际上取决于操作系统.不同的操作系统可以不同地处理内存管理
话虽这么说,任何合理的操作系统(尤其是多任务操作系统)都将释放进程终止后进程分配的所有内存.
我假设这背后的原因是操作系统必须能够优雅地处理不规则的情况:
free其动态分配的内存本身)任何值得盐的操作系统都必须能够处理这种情况.它必须将系统的其他部分(例如自身和其他运行过程)与故障过程隔离开来.如果没有,进程的内存泄漏将传播到系统.这意味着操作系统会泄漏内存(通常被认为是一个错误).
保护系统免受内存泄漏的一种方法是确保一旦进程结束,就可以释放它使用的所有内存(以及可能的其他资源).
分配给程序的任何内存都应在程序终止时释放,无论是静态分配还是动态分配.对此的主要例外是如果进程分叉到另一个进程.
如果您没有明确free任何内存malloc,它将保持分配,直到该过程终止.