问题描述
我有一个要在Oracle Linux OS上运行的C ++应用程序。
考虑一下,我使用new
运算符创建了一些对象。尽管我使用过delete运算符来取消分配它,但是force kill命令将无法实现此实现。
但是,如果我强制终止(kill -9
)进程,操作系统是否会取消动态分配的内存(使用new
运算符)?由于无法找到直接的答案,因此我想了解一些信息。
谢谢。
解决方法
但是,如果我强制终止(
kill -9
)进程,操作系统是否将动态分配(使用new
运算符分配的内存)?
内存通过虚拟内存系统和内存管理单元(MMU)与进程绑定。因此,是的,所有内存(不仅仅是通过new
分配的内存)都将被释放。
例外情况是全局进程间通信(IPC)资源,例如共享内存,缓存文件等。
,当某个进程以某种方式终止时,内核将清除所有进程资源,包括内存和文件对象。当您终止进程时,它将立即停止运行,因此不会运行包含销毁器的清除代码。因此,是的,所有内存都已释放,但是发生的级别比堆和堆栈低得多。