ala*_*oc3 12 process memory exit
假设我在 c/c++ 中创建了一个程序,我在其中手动分配了一些变量。然后在运行程序时,我发送一个中断信号 (Ctrl-C)。这些变量是从内存中释放出来的,还是会占用空间直到系统关闭?
另外,如果我只是创建了不是手动分配的整数,这些变量是驻留的,还是立即被删除呢?
我认为分配的变量将保留,常规变量将被删除(因为堆栈)。如果是这种情况,有没有办法在程序停止后从内存中释放分配的变量?
只是好奇。:)
Gil*_*il' 16
进程由内核管理。内核并不关心程序员如何分配变量。它只知道某些内存块属于该进程。C 运行时将 C 内存管理特性与内核特性相匹配:自动变量进入称为“堆栈”的内存块,动态存储(malloc和朋友)进入称为“堆”的内存块。该进程调用系统调用,例如sbrk和mmap以获取具有MMU 页粒度的内存。在这些块中,运行时确定将自动变量和动态分配的对象放在哪里。
当一个进程死亡时,内核更新它的内存管理表,为每个 MMU 页记录它不再被进程使用。无论进程如何退出,无论是否违反(通过调用系统调用)或不违反(被信号杀死),都会发生这种情况。不再被任何进程使用的页面被标记为可重用。
释放不再使用的动态分配的存储通常是一种良好的卫生习惯,因为您永远不知道一段代码何时可能在长时间运行的程序中被重用。但是当一个进程终止时,操作系统会释放它的所有资源:内存、打开的文件等。
操作系统不会自动清理的唯一资源是设计为在操作系统上具有全局范围的资源,例如临时文件。