给出以下代码:
#include <stdio.h>
int main()
{
int *p;
p = (int *)malloc(10 * sizeof(int));
while(1);
return 0;
}
当编译并运行上面的代码,并且在执行时通过按 Ctrl + C 中断代码时,如何释放分配给p
的内存?这里的操作系统有什么作用?它与C ++的情况有何不同,使用new
运算符?
答案 0 :(得分:13)
当进程终止时,操作系统将回收进程正在使用的所有内存。
即使操作系统收回你的应用程序在终止时使用的内存,人们会因为内存泄漏而造成大量内存泄漏的原因是,通常非重要的应用程序会长时间运行,慢慢吞噬所有内存系统。对于寿命很短的程序来说,这不是一个问题。 (但你永远无法分辨一个单行程何时会成为一个庞大的程序,所以即使在小程序中也不会有任何内存泄漏。)
答案 1 :(得分:3)
顺便说一句(除了Seth Carnegie说):
使用<signal.h>
中的例程,您可以捕获SIGINT
信号(中断)以任何方式处理 Ctrl + C ,例如清理任何重要资源,不仅是内存(如关闭文件,从而避免丢失任何缓冲和尚未写入的内容,或轻轻关闭网络连接)。
答案 2 :(得分:0)
_exit
的完整说明如下:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html
当一个过程因致命信号而终止时,会发生同样的事情。
答案 3 :(得分:0)
内存实际上并非“free()”d。
操作系统获取的内存是页面大小(通常是4kbytes的内存)。每当进程耗尽内存时,它就会获取额外的页面,这些是malloc()实际使用的空间。当进程终止时,所有页面都返回到操作系统,使得实际上不需要调用。如果你的程序是一个服务器或类似的程序,那么永远不会被释放的每一块内存只会在程序被实际杀死时返回 - 这使得每个内存都需要更多内存。