日期:2014-05-16  浏览次数:20866 次

进程退出后malloc的内存是否会被释放??
linux下使用exit()函数退出进程,那么这个进程中使用malloc申请的内存会被系统回收吗?,如果使用kill函数呢?

------解决方案--------------------
当然都会,OS会程序所有的内存都回收的
要是不回收,崩溃的程序一多系统就崩溃了
------解决方案--------------------

当一个进程退出后,不管是正常退出或者是异常退出,操作系统都会释放这个进程的资源。包括这个进程分配的内存,打开的文件等等。
用malloc分配的内存属于这个进程使用的内存,在进程退出后,当然会释放。操作系统如果连这个都做不到,那它还能做什么?
4楼引用的那段英文:
Memory obtained with malloc() must be returned to the operating system with a call to free() in order to prevent memory leaks.

是指在一个进程内,必须用free将malloc取得的地址返还给操作系统,以避免内存泄露。而如果进程已终止,就没有这个问题了。

------解决方案--------------------
内存泄露的前提是进程一直在运行;进程一旦推出,所占的整个虚拟内存都被销毁,所有内存资源都会被系统回收。
------解决方案--------------------
一般情况下不会,在编程时这种情况是不允许的
但对于某些操作系统会有定时的垃圾处理机制,也就是说会定时的扫描系统中是否有这种垃圾数据,如果有系统会自动的把他们释放掉,但这又要增加系统的开销。
------解决方案--------------------
讨论这个很好,我也在实践和探讨中。
DOS肯定自动释放在结束运行时。
------解决方案--------------------
探讨
如果进程已经退出的话,内存是应该能被释放的。
想问一下的是,Linux里会不会出现Windows中的状况,就是程序关了,但进程却留在进程管理器中没退出?

------解决方案--------------------
我测试一下,不能说是标准的,但可以有这样的结论:进程(Linux)退出时,所申请的内存会自动释放。
C/C++ code

#include <sys/sysinfo.h>
#include <unistd.h>
#include <string.h>

void show(struct sysinfo *_sys)
{
printf("Total usable main memory size %d\nAvailable memory size %d\n",_sys->totalram, _sys->freeram);
printf("Amount of shared memory %d\nMemory used by buffers %d\n",_sys->sharedram,_sys->bufferram);
printf("Total swap space size %d\nswap space still available %d\n", _sys->totalswap, _sys->freeswap);
printf("Number of current processes %d\n", _sys->procs);
printf("Memory unit size in bytes %ld\n",  _sys->mem_unit);
}

main()
{
static char suc[]="------------- alloc successful ! --------------",
    fai[]="--------------- Fail to alloc ! ----------------";
struct sysinfo _sys;
char *pt;
sysinfo(&_sys);
show(&_sys);
pt=(char *)malloc(80000000); /* 此值可以增大,以强化测试效果 */
if(pt){ strcpy(pt, suc);  puts(pt); }
else puts(fai);
sysinfo(&_sys);
show(&_sys);
}

------解决方案--------------------
Total usable main memory size 2117382144
Available memory size 90734592
Amount of shared memory 0
Memory used by buffers 95215616
Total swap space size 0
swap space still available 0
Number of current processes 86
Memory unit size in bytes 1
------------- alloc successful ! --------------
Total usable main memory size 2117382144
Available memory size 90734592
Amount of shared memory 0
Memory used by buffers 95215616
Total swap space size 0
swap space still available 0
Number of current processes 86
Memory unit size in bytes 1

//释放了~